使用ILMerge时无法加载mscorsn.dll

时间:2016-03-25 09:48:55

标签: .net ilmerge snk

我在具有管理员权限的cmd上使用以下命令:

ILMerge.exe  /wildcards /log:ILMerge.log /allowdup 
             /targetplatform:"v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319" 
             /lib:"C:\SDK2016\SDK2016\Bin" 
             /lib:"packages\Microsoft.CrmSdk.Extensions.7.1.0.1\lib\net45" 
             /lib:"packages\log4net.2.0.5\lib\net45-full" 
             /keyfile:"Tools\Snk\XXX.snk" 
             /out:"c:\XXXALLMERGED.dll" 
             "c:\proj\alldlls\*.dll"

我在日志文件的末尾收到以下错误:

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)

由于我的targetframework是v4而我的文件夹是“v4,C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319”,我检查了mscorsn.dll是否存在;它存在。

那么,问题可能是什么?你能帮忙吗?

5 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,并设法修复它。

最初我生成了一个.PFX文件,用于在Visual Studio中签署我的程序集(使用项目属性窗口中的Signing选项卡)。然后,我将.PFX文件中的公钥解压缩为.SNK文件(使用sn.exe)。

当我尝试使用ILMerge.exe并使用生成的.SNK文件时,我会收到"Unable to load DLL 'mscorsn.dll'"错误。

我通过删除.PFX和生成的.SNK文件来修复它。 然后我生成了一个新的.SNK文件,如下所示(在VS中):

  • 项目属性>签名
  • 选择强名称密钥文件:<New>
  • 指定.SNK文件的文件名。
  • 取消选中“使用密码保护我的密钥文件”&lt;这似乎可以解决问题。

这会生成一个新的.SNK文件,当我将该文件与ILMerge一起使用时,错误消失了。

HTH

答案 1 :(得分:3)

同样的问题。 这个答案Unable to load DLL mscorsn.dll with ILMerge对我有帮助。

(很快:ilmerge需要安装.NET3.5)

答案 2 :(得分:2)

/delaysign 之后添加 /keyfile 开关。这样就可以了。

答案 3 :(得分:0)

我连续两天拔头发,试图在机器上解决这个问题,终于找到了答案。此处粘贴的任何建议均无济于事。我终于在IlMerge github上进行搜索,并找到了有关与MachineKeys文件夹可能没有适当权限的连接的帖子。

如果您的任何人遇到相同的问题而没有任何效果,请转到此目录: C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys

并设置“读取和写入MachineKeys”文件夹的权限:

Permissions on MachineKeys folder

此链接帮助我正确设置了

https://odetocode.com/blogs/scott/archive/2020/01/12/solving-access-denied-in-crypto-machine-keys.aspx

答案 4 :(得分:-1)

删除/ keyfile参数有效。好吧签名是我猜的另一个问题。不知道如何解决这个问题,但至少它是这样解决的。