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

StackOverflow https://stackoverflow.com/questions/45702

  •  09-06-2019
  •  | 
  •  

문제

.NET 프레임워크를 사용할 수 없는 시스템에서 .NET 애플리케이션을 실행하려는 경우;애플리케이션을 네이티브 코드로 컴파일할 수 있는 방법이 있나요?

도움이 되었습니까?

해결책

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

당신이 사용할 수있는 응겐.

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

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

다른 팁

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

리모트소프트 샐러맨더

그 중 몇 가지를 테스트했는데 현재 .NET 3.5를 지원하고 뛰어난 가상화 스택을 갖춘 유일한 제품은 다음과 같습니다. 제노코드 포스트빌드

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

마이크로소프트가 발표했다. .NET 네이티브 미리보기 프레임워크를 설치하지 않고도 .NET 애플리케이션을 실행할 수 있습니다.

구경하다: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announce-net-native-preview.aspx

자주하는 질문: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

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

여기에 있는 다른 답변 중 일부가 언급했듯이 .NET 네이티브 앱을 네이티브 기계어 코드로 컴파일하는 도구입니다.하지만 그 답변과는 달리 설명하겠습니다. 어떻게 그것을하기 위해.

단계:

  1. 설치하다 닷넷 CLI (명령줄 인터페이스) 도구는 새로운 .NET Core 도구 체인의 일부입니다.이를 사용하여 앱을 컴파일합니다.당신은 그것에 대한 좋은 기사를 찾을 수 있습니다 여기.

  2. 쉘 프롬프트를 열고 cd 앱 디렉토리로 이동하세요.

  3. 다음을 입력하세요:

    dotnet compile --native
    

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

Native compiled .NET Core EXE

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


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

dotnet compile --native --cpp

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

이에 대한 자세한 정보는 dotnet CLI에서 찾을 수 있습니다. GitHub 저장소.

예, 사용 중입니다 응겐, 네이티브 이미지 생성기.그러나 알아야 할 사항이 많이 있습니다.

  • 실행 파일을 실행하려면 여전히 CLR이 필요합니다.
  • CLR은 실행 환경(예:486 대586 대686 등)

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

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

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

원래는 iPhone용 .NET이나 Mono가 없기 때문에 설계되었기 때문에 MonoTouch를 만든 방법입니다.

.NET 네이티브라는 새로운 사전 컴파일 기술을 사용하여 이 작업을 수행할 수 있습니다.여기에서 확인해보세요: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

현재는 Windows 스토어 앱에서만 사용할 수 있습니다.단일 구성 요소 연결을 수행합니다.따라서 .NET Framework 라이브러리는 앱에 정적으로 연결됩니다.모든 것이 네이티브로 컴파일되고 IL 어셈블리는 더 이상 배포되지 않습니다.앱은 CLR에 대해 실행되지 않고 관리형 런타임(Mrt.dll)이라는 단순하고 최적화된 런타임에 대해 실행됩니다.

위에서 설명한 대로 NGEN은 혼합 컴파일 모델을 사용하고 동적 시나리오를 위해 IL 및 JIT에 의존했습니다..NET 네이티브는 JIT를 활용하지 않지만 다양한 동적 시나리오를 지원합니다.코드 작성자는 다음을 활용해야 합니다. 런타임 지시어 지원하려는 동적 시나리오에 대해 .NET 네이티브 컴파일러에 힌트를 제공합니다.

ngen.exe를 사용하여 네이티브 이미지를 생성할 수 있습니다. 하지만 원래의 비네이티브 코드도 배포해야 하며 대상 시스템에 프레임워크가 설치되어 있어야 합니다.

실제로 문제가 해결되지는 않습니다.

.NET의 특성은 MSIL로 컴파일된 앱을 설치할 수 있다는 것입니다. 그런 다음 JIT 또는 Ngen을 통해 MSIL은 네이티브 코드로 컴파일되고 캐시에 로컬로 저장됩니다..NET 프레임워크와 독립적으로 실행될 수 있는 진정한 네이티브 .exe를 생성하려는 의도는 없었습니다.

어쩌면 이 작업을 수행하는 해킹이 있을 수도 있지만 나에게는 안전하지 않은 것 같습니다.다음과 같이 프레임워크가 필요한 역학이 너무 많습니다.동적 어셈블리 로딩, MSIL 코드 생성 등

2019 답변:사용 닷넷/코러트..NET Core 프로젝트를 독립 실행형으로 컴파일할 수 있습니다. .exe 파일.종속성 없음(다음과 같은 시스템 라이브러리 제외) kernel32.dll).이것이 바로 OP에 필요한 것이라고 확신합니다.

GitHub 홈페이지에서:

CoreRT 컴파일러는 관리되는 .NET Core 애플리케이션을 배포하기 쉬운 기본(아키텍처별) 단일 파일 실행 파일로 컴파일할 수 있습니다.또한 다른 프로그래밍 언어로 작성된 애플리케이션에서 사용할 수 있는 독립 실행형 동적 또는 정적 라이브러리를 생성할 수도 있습니다.

나는 그것이 불가능하다고 생각한다..NET FW도 배포해야 합니다..NET 앱을 네이티브 코드로 컴파일하려면 NGen을 사용하세요. 도구

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top