首页 > 解决方案 > 使用 Visual Studio 2017 构建的 .NET 4.7.2 C# 控制台应用程序的 ILRepack 需要在 Windows 7 上安装框架

问题描述

我有以下构建后事件,它应该将所有 .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

但它不能打包所有东西,因为当我在准系统 Windows 7 x64 VM 中运行它时,弹出窗口说需要 .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,但它失败了,因为它引用了它无法遵循的第三方库。我已将该参考作为资源嵌入到我的应用程序中,并且工作正常。

标签: c#consoleilmergeilrepack

解决方案


ILRepack/ILMerge 仅将非 .NET Framework 依赖项合并到最终输出中(除非您专门尝试合并框架程序集)。但是您仍然需要原始的 .NET 库可用。所以如果你使用4.7.2,你需要在目标机器上安装4.7.2。

如果您的目标是尝试“降低”目标 .NET Framework 版本(即,它在 Windows 7 上无需其他任何东西即可运行),那么这将行不通,您必须以 .NET 4.0 为目标(即Windows 更新后默认在 Windows 7 上)

如果您想要一个不需要额外安装的独立可执行文件,您应该查看.NET Core,它在应用程序旁边提供了 .NET 框架。


推荐阅读