Unable to load DLL mscorsn.dll with ILMerge

倾然丶 夕夏残阳落幕 提交于 2020-01-05 13:52:15

问题


I am trying to compile a project that uses ILMerge to combine multiple DLLs together and then sign them for deployment to CRM. The code compiled, but ILMerge fails. This process works on other developers machines but not mine.

I am using Visual Studio 2015, Windows 10, and building against .NET 4.5.2.

All of the projects are compiling with AnyCPU.

Resolved assembly reference 'System.Runtime.Caching' to 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319..\v4.0.30319\System.Runtime.Caching.dll'. (Used framework directory.)

An exception occurred during merging: Unable to load DLL 'mscorsn.dll': The specified module could not be found. (Exception from 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) at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) at ILMerging.ILMerge.Merge() at ILMerging.ILMerge.Main(String[] args)

My Post-build event arguments are:

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

I can locate mscorsn.dll manually on my computer and drop it into the local folder. ILMerge picks it up but depending on which version I use (there are 4-5 different copies of it within Windows) it will either outright fail or state it was unable to sign the final dll.

I have tried pointing the targetplatform towards specific .NET folders that have the mscorsn.dll file to no avail.


回答1:


I found the answer. It seems that ILMerge requires .NET 3.5 and that is not present on Windows 8, 8.1 or 10 by default. After installing .NET 3.5, ILMerge worked perfectly.

  • Programs and Features ->
  • Turn Windows features on or off ->
  • .NET Framework 3.5 (includes .NET 2.0 and 3.0)


来源:https://stackoverflow.com/questions/35925123/unable-to-load-dll-mscorsn-dll-with-ilmerge

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!