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
Эта ссылка помогла мне правильно настроить:
Удаление аргумента /keyfile сработало. Ну, подписание это еще одна проблема, я думаю. Не знаю, как это решить, но, по крайней мере, так получилось.