3

我在具有管理员权限的 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)

由于我的目标框架是 v4 并且我的文件夹是“v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319”,因此我检查了 mscorsn.dll 是否存在;它存在。

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

4

5 回答 5

6

我有同样的问题并设法解决它。

最初我生成了一个 .PFX 文件以在 Visual Studio 中对我的程序集进行签名(使用项目属性窗口中的“签名”选项卡)。然后,我将 .PFX 文件中的公钥提取到 .SNK 文件中(使用 sn.exe)。

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

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

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

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

高温高压

于 2016-12-06T10:22:55.507 回答
3

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

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

于 2018-03-14T13:12:18.987 回答
2

后添加 /delaysign 开关 /keyfile 。这会成功的。

于 2018-03-26T09:45:29.477 回答
0

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

如果你们中的任何人有同样的问题并且没有任何工作,请转到此目录:C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys

并将 MachineKeys 文件夹的权限设置为读写:

MachineKeys 文件夹的权限

此链接帮助我正确设置:

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

于 2020-08-10T12:02:05.713 回答
-1

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

于 2016-03-25T12:39:15.587 回答