使用ILMerge合并VS2017项目DLL时遇System.Web.Http引用错误求助
解决ILMerge合并DLL时"unresolved assembly reference not allowed: System.Web.Http"错误
你在合并VS2017项目DLL时遇到的这个问题,本质是ILMerge无法正确定位或加载System.Web.Http程序集,下面是几个针对性的解决思路和操作步骤:
1. 给ILMerge指定程序集搜索路径
ILMerge默认只会在当前执行目录和系统GAC(全局程序集缓存)里查找引用的程序集,如果System.Web.Http是通过NuGet安装到项目中的,你需要用/lib参数明确告诉ILMerge它的存放路径。
比如你的System.Web.Http在项目的NuGet包目录下,命令可以调整成这样:
ILMerge.exe /out:YourMerged.dll YourFirstDll.dll YourSecondDll.dll /lib:"C:\YourProjectRoot\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45"
记得把路径和版本号替换成你机器上实际的内容。
2. 完善ILMerge.exe.config配置文件
你提供的配置文件只有启动项配置,还需要补充程序集绑定规则来指定System.Web.Http的位置。修改你的ILMerge.exe.config文件,补充完整内容:
<?xml version ="1.0"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/> </startup> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral"/> <!-- 替换成你项目中System.Web.Http的实际版本号和文件路径 --> <codeBase version="5.2.7.0" href="file:///C:\YourPath\To\System.Web.Http.dll"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
注意这里的版本号必须和你项目引用的System.Web.Http版本完全一致,路径要确保能直接访问到该DLL文件。
3. 确认目标框架版本完全匹配
检查你要合并的两个DLL、System.Web.Http以及ILMerge的目标平台版本是否统一。比如你的项目基于.NET Framework 4.6.1,那在ILMerge命令里要加上/targetplatform参数明确指定:
/targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319
框架版本不兼容也会导致程序集引用解析失败。
4. 验证ILMerge版本兼容性
旧版本的ILMerge可能不支持VS2017常用的.NET Framework 4.6+版本,如果以上方法都无效,建议更新ILMerge到最新版本(可以通过NuGet安装ILMerge包,或者获取官方最新发行版)。
尝试完这些步骤后重新运行ILMerge命令,应该就能解决这个引用未解析的问题了。
内容的提问来源于stack exchange,提问作者Kitty




