Невозможно загрузить 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)
Другие вопросы по тегам