[.net] .NET 애플리케이션을 네이티브 코드로 컴파일하는 방법은 무엇입니까?

.NET 프레임 워크를 사용할 수없는 컴퓨터에서 .NET 응용 프로그램을 실행하려는 경우; 애플리케이션을 네이티브 코드로 컴파일하는 방법이 있습니까?



답변

Microsoft에는 MSIL을 네이티브 코드로 컴파일 하는 방법을 설명하는 기사가 있습니다.

Ngen 을 사용할 수 있습니다 .

네이티브 이미지 생성기 (Ngen.exe)는 관리되는 응용 프로그램의 성능을 향상시키는 도구입니다. Ngen.exe는 컴파일 된 프로세서 별 기계어 코드를 포함하는 파일 인 네이티브 이미지를 만들어 로컬 컴퓨터의 네이티브 이미지 캐시에 설치합니다. 런타임은 JIT (Just-In-Time) 컴파일러를 사용하여 원본 어셈블리를 컴파일하는 대신 캐시의 네이티브 이미지를 사용할 수 있습니다.

불행히도 프로그램을 실행하려면 프레임 워크의 라이브러리가 여전히 필요합니다. 필요한 모든 파일을 단일 실행 파일로 컴파일 할 수있는 MS .Net 프레임 워크 SDK에는 내가 아는 기능이 없습니다.


답변

RemoteSoft는 .NET 응용 프로그램을 .NET 설치없이 실행할 수있는 패키지로 컴파일하는 도구를 만듭니다. 나는 그것에 대한 경험이 없습니다.

RemoteSoft 도롱뇽


답변

여기에 언급 된 다른 답변 중 일부가 언급했듯이 .NET 네이티브 도구를 사용하여 앱을 네이티브 기계어 코드로 컴파일 할 수 있습니다. 그러나 그 답변과 달리 방법 을 설명 하겠습니다.

단계 :

  1. 새 .NET Core 도구 체인의 일부인 dotnet CLI (명령 줄 인터페이스) 도구를 설치합니다 . 이것을 사용하여 앱을 컴파일합니다. 여기 에서 좋은 기사를 찾을 수 있습니다.

  2. 셸 프롬프트를 열고 cd앱 디렉터리로 이동합니다.

  3. 이것을 입력하십시오 :

    dotnet compile --native
    

그게 다야! 완료되면 앱이 다음과 같이 단일 바이너리로 컴파일됩니다.

네이티브 컴파일 된 .NET Core EXE

독립 실행 형 실행 파일이됩니다. PDB, 어셈블리 또는 구성 파일이 포함되어 있지 않습니다 (만세!).


또는 더 빠른 프로그램을 원하면 다음을 실행할 수 있습니다.

dotnet compile --native --cpp

그러면 C ++ 코드 생성기 (RyuJIT와 반대)를 사용하여 프로그램을 최적화하므로 앱이 AOT 시나리오에 더욱 최적화됩니다.

dotnet CLI GitHub repo 에서 이에 대한 자세한 정보를 찾을 수 있습니다 .


답변

나는 그중 몇 가지를 테스트했으며 현재 .NET 3.5를 지원하고 훌륭한 가상화 스택을 가진 유일한 것은 Xenocode Postbuild입니다.

ngen을 사용하는 경우에도 .NET 프레임 워크를 설치해야하지만 도구를 사용하면 모든 관리 코드가 네이티브 코드로 컴파일되므로 프레임 워크없이 머신에 배포 할 수 있습니다.


답변

Microsoft는 프레임 워크를 설치하지 않고도 .NET 애플리케이션을 실행할 수 있는 .NET Native Preview 를 발표했습니다 .

살펴보기 : http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

FAQ : http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

여기에서 VS2013 용 Microsoft .NET Native를 다운로드 할 수 있습니다. http://msdn.microsoft.com/en-US/vstudio/dotnetnative


답변

예, 네이티브 이미지 생성기 인 Ngen을 사용 합니다. 그러나 알아야 할 몇 가지 사항이 있습니다.

  • 실행 파일을 실행하려면 여전히 CLR이 필요합니다.
  • CLR은 실행되는 환경에 따라 어셈블리를 동적으로 최적화하지 않습니다 (예 : 486 vs. 586 vs. 686 등).

대체로 애플리케이션의 시작 시간을 줄여야하는 경우에만 Ngen을 사용할 가치가 있습니다.


답변

할 수 있습니다! 그러나 .NET 1.1로 제한됩니다 (제네릭 없음) :
Mono Ahead-Of-Time 컴파일 (AOT)

그러나 이것은 컴파일이 실제로 네이티브라는 것을 의미하므로 더 이상 단일 바이트 코드 어셈블리를 배포 할 수 없으며 플랫폼 당 하나씩 필요합니다.

원래 iPhone 용 .NET이나 Mono가 없기 때문에 설계 되었기 때문에 MonoTouch를 만들었습니다.