.NET 애플리케이션을 네이티브 코드로 컴파일하는 방법은 무엇입니까?
-
09-06-2019 - |
문제
.NET 프레임워크를 사용할 수 없는 시스템에서 .NET 애플리케이션을 실행하려는 경우;애플리케이션을 네이티브 코드로 컴파일할 수 있는 방법이 있나요?
해결책
Microsoft에는 다음과 같은 방법을 설명하는 기사가 있습니다. MSIL을 네이티브 코드로 컴파일
당신이 사용할 수있는 응겐.
기본 이미지 생성기 (ngen.exe)는 관리되는 응용 프로그램의 성능을 향상시키는 도구입니다.ngen.exe는 컴파일 된 프로세서 별 기계 코드를 포함하는 파일 인 기본 이미지를 생성하고 로컬 컴퓨터의 기본 이미지 캐시에 설치합니다.런타임은 JIT (Just-In-Time) 컴파일러를 사용하여 캐시의 기본 이미지를 사용하여 원래 어셈블리를 컴파일 할 수 있습니다.
불행하게도 프로그램을 실행하려면 프레임워크의 라이브러리가 여전히 필요합니다.내가 아는 MS .Net 프레임워크 SDK에는 필요한 모든 파일을 단일 실행 파일로 컴파일할 수 있는 기능이 없습니다.
다른 팁
RemoteSoft는 .NET 응용 프로그램을 .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 네이티브 앱을 네이티브 기계어 코드로 컴파일하는 도구입니다.하지만 그 답변과는 달리 설명하겠습니다. 어떻게 그것을하기 위해.
단계:
설치하다 닷넷 CLI (명령줄 인터페이스) 도구는 새로운 .NET Core 도구 체인의 일부입니다.이를 사용하여 앱을 컴파일합니다.당신은 그것에 대한 좋은 기사를 찾을 수 있습니다 여기.
쉘 프롬프트를 열고
cd
앱 디렉토리로 이동하세요.다음을 입력하세요:
dotnet compile --native
그게 다야!완료되면 앱은 다음과 같이 단일 바이너리로 컴파일됩니다.
독립 실행형 실행 파일이 될 것입니다.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을 사용하세요. 도구