无法使用ILMerge

时间:2016-03-10 19:07:04

标签: .net visual-studio ilmerge

我正在尝试编译一个项目,该项目使用ILMerge将多个DLL组合在一起,然后将它们签名以部署到CRM。代码已编译,但ILMerge失败。此过程适用于其他开发人员的计算机,但不适用于我的。

我正在使用Visual Studio 2015,Windows 10,并针对.NET 4.5.2构建。

所有项目都在使用AnyCPU进行编译。

  

解决了程序集引用'System.Runtime.Caching'到'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 .. \ v4.0.30319 \ System.Runtime.Caching.dll'。 (使用的框架目录。)

     

合并期间发生异常:   无法加载DLL“mscorsn.dll”:找不到指定的模块。 (来自HRESULT的异常:0x8007007E)      at System.Compiler.Writer.MscorsnStrongNameSignatureGeneration(String wszFilePath,String wszKeyContainer,Byte [] pbKeyBlob,Int32 cbKeyBlob,IntPtr ppbSignatureBlob,IntPtr pcbSignatureBlob)      at System.Compiler.Writer.WritePE(String location,Boolean writeDebugSymbols,Module module,Boolean delaySign,String keyFileName,String keyName)      在System.Compiler.Writer.WritePE(CompilerParameters compilerParameters,Module module)      在ILMerging.ILMerge.Merge()      在ILMerging.ILMerge.Main(String [] args)

我的Post-build事件参数是:

if "$(ConfigurationName)" == "Debug No ILMerge" goto :exit REM **** Create ILMerge Directory **** md "$(TargetDir)IlMerge" REM **** Delete Previous Log **** del "$(TargetDir)IlMerge\Log.txt" REM **** Run IlMerge **** "$(SolutionDir)packages\ILMerge.2.14.1208\tools\ILMerge.exe" /log:"$(TargetDir)IlMerge\Log.txt" /keyfile:"$(ProjectDir)Client.Xrm.Plugins.Key.snk" /targetplatform:v4 /out:"$(TargetDir)IlMerge\$(TargetFileName)" "$(TargetPath)" "$(TargetDir)DLaB.Common.dll" "$(TargetDir)DLaB.Xrm.2015.dll" "$(TargetDir)Client.Xrm.dll" "$(TargetDir)Applications.Web.Security.dll" "$(TargetDir).Domain.dll" "$(TargetDir)Newtonsoft.Json.dll" :exit

我可以在我的计算机上手动找到mscorsn.dll并将其放入本地文件夹。 ILMerge会选择它,但根据我使用的版本(Windows中有4-5个不同的副本),它将彻底失败或声明它无法签署最终的dll。

我尝试将targetplatform指向具有mscorsn.dll文件的特定.NET文件夹无效。

1 个答案:

答案 0 :(得分:3)

我找到了答案。似乎ILMerge需要.NET 3.5,默认情况下不存在于Windows 8,8.1或10上。安装.NET 3.5后,ILMerge运行良好。

  • 程序和功能 - >
  • 打开或关闭Windows功能 - >
  • .NET Framework 3.5(包括.NET 2.0和3.0)