mscorsn.dll не загружается при использовании ILMerge

Я использую следующую команду в 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)

Поскольку моя целевая структура — v4, а моя папка — «v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319», я проверил, существует ли там mscorsn.dll; и он существует.

Итак, в чем может быть проблема? Не могли бы вы помочь?


person rebulanyum    schedule 25.03.2016    source источник
comment
Изолируйте проблемную DLL, исключив ее из команды, хрустальный шар говорит, что она нацелена на 2.0.50727. Используйте ildasm.exe для проверки. Ваш аргумент /targetplatform опасно ошибочен, вы должны это исправить.   -  person Hans Passant    schedule 25.03.2016
comment
хорошо @HansPassant ; Я попробовал ту же команду без аргумента /targetplatform: и я получаю ту же ошибку :) Как я могу изолировать проблемную dll?   -  person rebulanyum    schedule 25.03.2016
comment
Вы изолируете его, пытаясь запустить ILMerge несколько раз. Каждый раз добавляя еще одну DLL. Когда это не удается, вы нашли нарушителя спокойствия.   -  person Hans Passant    schedule 25.03.2016
comment
@HansPassant хорошо, но у меня есть файл журнала. Зачем пробовать каждую сборку? Это может быть даже .Net framework или Microsoft CRM SDK. Происходит слишком много сборов...   -  person rebulanyum    schedule 25.03.2016


Ответы (5)


та же проблема. Этот ответ Невозможно загрузить DLL mscorsn.dll с ILMerge мне помогло.

(кратко: ilmerge требует установки .NET3.5)

person grim.ub    schedule 14.03.2018

У меня была такая же проблема, и мне удалось ее исправить.

Первоначально я создал файл .PFX для подписи моей сборки в Visual Studio (используя вкладку «Подписание» в окне свойств проекта). Затем я извлек открытый ключ из файла .PFX в файл .SNK (используя sn.exe).

Когда я пытался использовать ILMerge.exe и использовать сгенерированный файл .SNK, я получал ошибку "Unable to load DLL 'mscorsn.dll'".

Я исправил это, удалив файлы .PFX и сгенерированные файлы .SNK. Затем я создал новый файл .SNK следующим образом (в VS):

  • Свойства проекта > Подписание
  • Выберите файл ключа со строгим именем: <New>
  • Укажите имя файла .SNK.
  • Снимите флажок «Защитить мой файл ключа паролем» ‹ Кажется, это помогло.

Это сгенерировало новый файл .SNK, и когда я использовал этот файл с ILMerge, ошибка исчезла.

ХТН

person colivier    schedule 06.12.2016

Добавьте переключатель /delaysign после /keyfile . Это поможет.

person Praveen Singh    schedule 26.03.2018

Я рвал на себе волосы 2 дня подряд, пытаясь решить эту проблему на своей машине, и наконец нашел ответ. Ни одно из предложений, вставленных здесь, не помогло. Наконец, я искал github IlMerge и нашел сообщение о возможном подключении к папке MachineKeys без надлежащих разрешений.

Если у кого-то из вас есть такая же проблема и ничего не работает, перейдите в этот каталог: C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys

И установите разрешения на чтение и запись для папки MachineKeys:

Разрешения для папки MachineKeys

Эта ссылка помогла мне правильно настроить:

https://odetocode.com/blogs/scott/archive/2020/01/12/solving-access-denied-in-crypto-machine-keys.aspx

person ksiadz_robert666    schedule 10.08.2020

Удаление аргумента /keyfile сработало. Думаю, подписание — это еще одна проблема. Не знаю, как это решить, но, по крайней мере, это сработало.

person rebulanyum    schedule 25.03.2016