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; и это существует.

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

4 ответа

Решение

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

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

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

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

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

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

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

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

НТН

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

Я выдергивал волосы 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

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

Другие вопросы по тегам