我有以下构建后事件,它应该将所有.NET框架依赖项打包到.exe中:
$(SolutionDir)packages\ILRepack.2.0.16\tools\ILRepack.exe
/out:"$(TargetDir)$(TargetName).all.exe"
"$(TargetDir)$(TargetName).exe"
"$(TargetDir)*.dll"
/target:exe
/targetplatform:v4,"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2" /wildcards但它不能包罗万象,因为当我在一个简单的Windows7 x64虚拟机中运行它时,弹出窗口显示.NET是必需的。安装.NET 4.7.2后,一切正常。
以下是ILRepack的输出:
4>------ Rebuild All started: Project: GenerateReport, Configuration: Release Any CPU ------
4> GenerateReport -> C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\GenerateReport.exe
4> INFO: IL Repack - Version 2.0.16
4> INFO: ------------- IL Repack Arguments -------------
4> /out:C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\GenerateReport.all.exe C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\GenerateReport.exe C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\*.dll
4> -----------------------------------------------
4> INFO: Adding assembly for merge: C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\GenerateReport.exe
4> INFO: Adding assembly for merge: C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\ICSharpCode.SharpZipLib.dll
4> INFO: Adding assembly for merge: C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\MDIData.dll
4> INFO: Adding assembly for merge: C:\code\Thor\Main\pc\tools\ReportGenerator\GenerateReport\bin\Release\MDIReporter.dll
4> INFO: Processing references
4> INFO: Processing types
4> INFO: Merging <Module>
4> INFO: Merging <Module>
4> INFO: Merging <Module>
4> INFO: Renaming <PrivateImplementationDetails> into <ea0a2b3c-dc31-41d4-9795-6271bac3aa6b><PrivateImplementationDetails>
4> INFO: Merging <Module>
4> INFO: Processing exported types
4> INFO: Processing resources
4> INFO: Fixing references
4> INFO: Writing output assembly to disk
4> INFO: Finished in 00:00:02.2785005这是一个使用“任何CPU”构建的C#控制台应用程序。
我的解决方案中的另外两个项目是.NET 4.7.2桌面类库。
我也尝试过ILMerge,但它失败了,因为它引用了一个thirdy party库,它不能跟踪它。我已经将该引用作为资源嵌入到我的应用程序中,它工作得很好。
发布于 2018-12-09 07:01:31
ILRepack/ILMerge仅将非.NET框架依赖项合并到最终输出中(除非您特别尝试合并框架程序集)。但是您仍然需要原始的.NET库可用。因此,如果您使用4.7.2,则需要在目标计算机上使用4.7.2。
如果你的目标是尝试“降低”目标.NET框架版本(也就是说,它在Windows7上不需要任何东西就能运行),那么这将不会起作用,你将不得不瞄准.NET 4.0 (这是Windows 7更新后的默认版本)。
如果你想要一个不需要额外安装的自包含的可执行文件,你应该看看.NET Core,它与应用程序一起提供了.NET框架。
https://stackoverflow.com/questions/53489722
复制相似问题