Сбой генерации сборки - у ссылочной сборки нет строгого имени. Почему не работают другие решения? - PullRequest
12 голосов
/ 22 февраля 2012

Это классическая задача, которая имеет множество решений , описанных .Однако ни один из них, похоже, не работает для меня.

Я использую библиотеку Report.NET в решении SharePoint.Добавление Reports.dll в качестве ссылки и компиляция приводит к сообщению об ошибке «Генерация сборки не удалась. Ссылочная сборка« Отчеты »не имеет строгого имени».Мой проект, однако, имеет key.snk, связанный в свойствах проекта.Поэтому я пытаюсь разобрать, подписать и собрать библиотеку DLL с помощью этого файла ключа, как описано в другом месте:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj
\dll>ildasm Reports.dll /out:Reports.il

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj
\dll>ilasm Reports.il /dll /resource=Reports.res /key=..\key.snk

<output removed for brevity>

Class 95
Class 96
Method Implementations (total): 1
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved
Writing PE file
Signing file with strong name
Operation completed successfully

В результате я получаю новую метку отчетов Reports.dll с указанием времени.Однако добавление этого в качестве ссылки на мой проект и сборку выдает то же сообщение об ошибке, что и раньше.В свойствах ссылки «Отчеты» отображается «Строгое имя: Ложь».

Чтобы не разочароваться из-за небольшого количества проблем, я пытаюсь подписать сборку заново с помощью утилиты сильного присвоения имен:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj
\dll>sn -R Reports.dll ..\key.snk

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Assembly 'Reports.dll' successfully re-signed

Возможно, стоит отметить, что запуск утилиты SN завершается неудачно с сообщением об ошибке «Reports.dll не представляет сборку со строгим именем» при ее запуске до процесса дизассемблирования / подписи / повторной сборки.

Однако при запуске его после разборки / подписывания / повторной сборки при повторном добавлении его в Visual Studio все равно появляется исходное сообщение об ошибке.

Ответы [ 2 ]

20 голосов
/ 01 марта 2014

Я только что решил эту проблему в 2010 году, используя это:

Project Properties -> Signing -> uncheck Sign the assembly checkbox
3 голосов
/ 22 февраля 2012

Я бы предположил, что если после того, как вы однозначно подписали Reports.dll правильно из командной строки, VS по-прежнему говорит, что эта dll не подписана; тогда он должен ссылаться на неправильный файл.

Если вы хотите быть действительно параноиком и перепроверить строгие имена после подписания, загрузите Reports.dll в ildasm (вам нужно дважды щелкнуть узел манифеста в дереве и прокрутить вниз, чтобы найти раздел .publickey ). Или для простоты просто откройте его в ILSpy .

После подписания reports.dll; откройте proj-файл проекта, на который вы ссылаетесь, в виде XML-документа (если у вас есть VSC-команды Power, вы можете щелкнуть правой кнопкой мыши и «Редактировать файл проекта»; в противном случае вы можете выгрузить проект, а затем открыть его в VS, используя команду «Открыть с помощью» из Открыть файл диалоговое окно) и убедитесь, что ссылка на DLL действительно правильный путь. Если это не так, исправьте его и перезагрузите проект.

...