【发布时间】:2016-03-10 19:07:03
【问题描述】:
我正在尝试编译一个项目,该项目使用 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) 在 System.Compiler.Writer.MscorsnStrongNameSignatureGeneration(字符串 wszFilePath,字符串 wszKeyContainer,字节 [] pbKeyBlob,Int32 cbKeyBlob,IntPtr ppbSignatureBlob,IntPtr pcbSignatureBlob) 在 System.Compiler.Writer.WritePE(字符串位置,布尔 writeDebugSymbols,模块模块,布尔 delaySign,字符串 keyFileName,字符串 keyName) 在 System.Compiler.Writer.WritePE(CompilerParameters 编译器参数,模块模块) 在 ILMerging.ILMerge.Merge() 在 ILMerging.ILMerge.Main(String[] args)
我的构建后事件参数是:
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 文件夹,但无济于事。
【问题讨论】:
-
我也有同样的问题。
标签: .net visual-studio ilmerge