Я пытаюсь скомпилировать проект, который использует 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(String wszFilePath, String wszKeyContainer, Byte[] pbKeyBlob, Int32 cbKeyBlob, IntPtr ppbSignatureBlob, IntPtr pcbSignatureBlob) в System.Compiler.Writer.WritePEPE , Module module, Boolean delaySign, String keyFileName, String keyName) в System.Compiler.Writer.WritePE(CompilerParameterscompilerParameters, Module module) в 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
на определенные папки .NET, в которых есть файл mscorsn.dll, но безрезультатно.