Невозможно загрузить DLL mscorsn.dll с помощью ILMerge
Я пытаюсь скомпилировать проект, который использует 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, Byte[] pbKeyBlob, Int32 cbKeyBlob, IntPtrWlobWebBearSignSigner, Модуль Module, Boolean delaySign, String keyFileName, String keyName) в System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Модуль 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 безрезультатно.
1 ответ
Я нашел ответ. Кажется, что для ILMerge требуется.NET 3.5, а по умолчанию его нет в Windows 8, 8.1 или 10. После установки.NET 3.5 ILMerge работал отлично.
- Программы и возможности ->
- Включить или отключить функции Windows ->
- .NET Framework 3.5 (включает в себя.NET 2.0 и 3.0)