我在具有管理员权限的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是否存在;它存在。
那么,问题可能是什么?你能帮忙吗?
答案 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文件,当我将该文件与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
此链接帮助我正确设置了
答案 4 :(得分:-1)
删除/ keyfile参数有效。好吧签名是我猜的另一个问题。不知道如何解决这个问题,但至少它是这样解决的。