c# - 使用 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,但它失败了,因为它引用了它无法遵循的第三方库。我已将该参考作为资源嵌入到我的应用程序中,并且工作正常。
解决方案
ILRepack/ILMerge 仅将非 .NET Framework 依赖项合并到最终输出中(除非您专门尝试合并框架程序集)。但是您仍然需要原始的 .NET 库可用。所以如果你使用4.7.2,你需要在目标机器上安装4.7.2。
如果您的目标是尝试“降低”目标 .NET Framework 版本(即,它在 Windows 7 上无需其他任何东西即可运行),那么这将行不通,您必须以 .NET 4.0 为目标(即Windows 更新后默认在 Windows 7 上)
如果您想要一个不需要额外安装的独立可执行文件,您应该查看.NET Core,它在应用程序旁边提供了 .NET 框架。
推荐阅读
- c - 不要使用 libtiff 在 C 中获取图像深度值
- google-coral - 倒计时直到匹配珊瑚中的数字
- linux - 想做一个简单的脚本来压缩和解压 linux 中的文件
- javascript - Fiddler , Spoofing Referer 不能正常工作
- cad - 如何使用 eyeShot 创建绘制交互式矩形
- scala - 结合律被破坏的单子会在理解中产生不正确的结果吗?
- php - 使用 Codeigniter 在电子邮件上添加“发件人”标头
- android - Android 10、API 29 更新后,Android 振动应用程序不再工作
- javascript - 使用js添加复选框的简单问题
- redis - 如何使用 acl 限制对 redis pubsub 中某些主题的访问?