.NET 프레임 워크를 사용할 수없는 컴퓨터에서 .NET 응용 프로그램을 실행하려는 경우; 애플리케이션을 네이티브 코드로 컴파일하는 방법이 있습니까?
답변:
Microsoft에는 MSIL을 네이티브 코드로 컴파일 하는 방법을 설명하는 기사가 있습니다.
Ngen 을 사용할 수 있습니다 .
네이티브 이미지 생성기 (Ngen.exe)는 관리되는 응용 프로그램의 성능을 향상시키는 도구입니다. Ngen.exe는 컴파일 된 프로세서 별 기계어 코드를 포함하는 파일 인 네이티브 이미지를 만들어 로컬 컴퓨터의 네이티브 이미지 캐시에 설치합니다. 런타임은 JIT (Just-In-Time) 컴파일러를 사용하여 원본 어셈블리를 컴파일하는 대신 캐시의 네이티브 이미지를 사용할 수 있습니다.
불행히도 프로그램을 실행하려면 프레임 워크의 라이브러리가 여전히 필요합니다. 필요한 모든 파일을 단일 실행 파일로 컴파일 할 수있는 MS .Net 프레임 워크 SDK에는 내가 아는 기능이 없습니다.
RemoteSoft는 .NET 응용 프로그램을 .NET 설치없이 실행할 수있는 패키지로 컴파일하는 도구를 만듭니다. 나는 그것에 대한 경험이 없습니다.
여기에 언급 된 다른 답변 중 일부가 언급했듯이 .NET 네이티브 도구를 사용하여 앱을 네이티브 기계어 코드로 컴파일 할 수 있습니다. 그러나 그 답변과 달리 방법 을 설명 하겠습니다.
단계 :
새 .NET Core 도구 체인의 일부인 dotnet CLI (명령 줄 인터페이스) 도구를 설치합니다 . 이것을 사용하여 앱을 컴파일합니다. 여기 에서 좋은 기사를 찾을 수 있습니다.
셸 프롬프트를 열고 cd
앱 디렉터리로 이동합니다.
이것을 입력하십시오 :
dotnet compile --native
그게 다야! 완료되면 앱이 다음과 같이 단일 바이너리로 컴파일됩니다.
독립 실행 형 실행 파일이됩니다. PDB, 어셈블리 또는 구성 파일이 포함되어 있지 않습니다 (만세!).
또는 더 빠른 프로그램을 원하면 다음을 실행할 수 있습니다.
dotnet compile --native --cpp
그러면 C ++ 코드 생성기 (RyuJIT와 반대)를 사용하여 프로그램을 최적화하므로 앱이 AOT 시나리오에 더욱 최적화됩니다.
dotnet CLI GitHub repo 에서 이에 대한 자세한 정보를 찾을 수 있습니다 .
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
할 수 있습니다! 그러나 .NET 1.1로 제한됩니다 (제네릭 없음) : Mono Ahead-Of-Time 컴파일 (AOT)
그러나 이것은 컴파일이 실제로 네이티브라는 것을 의미하므로 더 이상 단일 바이트 코드 어셈블리를 배포 할 수 없으며 플랫폼 당 하나씩 필요합니다.
원래 iPhone 용 .NET이나 Mono가 없기 때문에 설계 되었기 때문에 MonoTouch를 만들었습니다.
.NET Native라는 새로운 사전 컴파일 기술을 사용하여이를 수행 할 수 있습니다. 여기에서 확인하십시오 : http://msdn.microsoft.com/en-US/vstudio/dotnetnative
현재는 Windows Store 앱에서만 사용할 수 있습니다. 단일 구성 요소 연결을 수행합니다. 따라서 .NET Framework 라이브러리는 앱에 정적으로 연결됩니다. 모든 것이 네이티브로 컴파일되고 IL 어셈블리가 더 이상 배포되지 않습니다. 앱은 CLR에 대해 실행되지 않지만 관리되는 런타임 (Mrt.dll)이라는 제거되고 최적화 된 런타임입니다.
위에서 언급했듯이 NGEN은 혼합 컴파일 모델을 사용하고 동적 시나리오를 위해 IL 및 JIT에 의존했습니다. .NET Native는 JIT를 사용하지 않지만 다양한 동적 시나리오를 지원합니다. 코드 작성자는 런타임 지시문 을 활용 하여 지원하려는 동적 시나리오에 대한 .NET 네이티브 컴파일러에 힌트를 제공해야합니다.
2019 답변 : dotnet / corert를 사용하십시오 . .NET Core 프로젝트를 독립 실행 형 .exe
파일 로 컴파일 할 수 있습니다. 종속성이 없습니다 (와 같은 시스템 라이브러리 제외 kernel32.dll
). 나는 이것이 OP에 정확히 필요한 것이라고 확신합니다.
GitHub 홈페이지에서 :
CoreRT 컴파일러는 관리되는 .NET Core 애플리케이션을 배포하기 쉬운 네이티브 (아키텍처 특정) 단일 파일 실행 파일로 컴파일 할 수 있습니다. 또한 다른 프로그래밍 언어로 작성된 애플리케이션에서 사용할 수있는 독립 실행 형 동적 또는 정적 라이브러리를 생성 할 수도 있습니다.
Native로 컴파일하는 주된 이유는 코드를 보호하기위한 것입니다. 그렇지 않으면 컴파일 된 MSIL이 클라이언트 컴퓨터에 소스 코드를 배포하는 것과 같습니다.
NGEN은 네이티브로 컴파일되지만 IL 코드를 배포해야합니다.이 목적은 시작 시간을 줄이기위한 것이지만 쓸모가 없습니다.
CoreRt는 알파 버전이며 간단한 helloworld 유형 앱에서만 작동합니다.
.Net Core는 단일 실행 파일로 컴파일되지만 원시 exe도 아닙니다. 이것은 IL 코드의 압축 파일 일 뿐이며 실행 중에 코드를 임시 폴더에 압축 해제합니다.
Microsoft의 간단한 질문은 RyuJIT가 IL을 즉석에서 네이티브로 컴파일 할 수 있다면 동일한 IL AOT (Ahead-of-Time)를 컴파일 할 수 없다는 것입니다.
net core RT 실행 가능한 솔루션처럼 보입니다. 곧 모든 앱이 .net 코어로 이동합니다. https://www.codeproject.com/Articles/5262251/Generate-Native-Executable-from-NET-Core-3-1-Proje?msg=5753507#xx5753507xx https://docs.microsoft.com/en-us / archive / msdn-magazine / 2018 / november / net-core-publishing-options-with-net-core
가능한 오래된 win .net sdk로 테스트되지 않았습니다.
이 ( http://www.dotnetnative.online/ )를 사용하여 .net 컴파일 된 exe를 네이티브 exe로 컴파일 해보십시오 . 저는 이것을 시도했지만 새롭지 만 좋습니다.
불가능하다고 생각합니다. .NET FW도 배포해야합니다. .NET 앱을 네이티브 코드로 컴파일하려면 NGen 도구를 사용하십시오.