Я добавил сборку со слабым именем в мой проект Visual Studio 2005 (который строго назван). Теперь я получаю сообщение об ошибке:
«Ссылочная сборка« xxxxxxxx »не имеет строгого имени»
Нужно ли подписывать эту стороннюю сборку?
Я добавил сборку со слабым именем в мой проект Visual Studio 2005 (который строго назван). Теперь я получаю сообщение об ошибке:
«Ссылочная сборка« xxxxxxxx »не имеет строгого имени»
Нужно ли подписывать эту стороннюю сборку?
Ответы:
Чтобы избежать этой ошибки, вы можете:
Инструкции по подписанию сторонних сборок вы найдете в .NET-fu: Подписание неподписанной сборки (без отложенной подписи) .
Подписание сторонних сборок
Основной принцип подписания третьей стороны -
Разберите сборку, используя
ildasm.exe
и сохраните промежуточный язык (IL):Перестройте и подпишите сборку:
Исправление дополнительных ссылок
Описанные выше шаги работают нормально, если ваша сторонняя сборка ( A.dll ) не ссылается на другую библиотеку ( B.dll ), которая также должна быть подписана. Вы можете разобрать, перестроить и подписать как A.dll, так и B.dll, используя приведенные выше команды, но во время выполнения загрузка B.dll не будет выполнена, поскольку A.dll изначально был создан со ссылкой на неподписанную версию B.dll .
Решением этой проблемы является исправление файла IL, созданного на шаге 1 выше. Вам нужно будет добавить токен открытого ключа B.dll к ссылке. Вы получите этот токен, позвонив
который даст вам следующий вывод:
Последняя строка содержит токен открытого ключа. Затем вам нужно найти в IL файла A.dll ссылку на B.dll и добавить токен следующим образом:
источник
Разверните файл проекта, который использует проект, у которого нет «ключа
.snk
строгого имени», и найдите файл (.StrongNameKey).Просмотрите этот файл в проводнике Windows (просто, чтобы вы знали, где он находится).
Вернувшись в Visual Studio в проект, который не имеет «ключа строгого имени», выполните
<Browse>
в.snk
файл, который вы нашли ранееЭто должно делать свое дело. Это решило проблему для меня для одного проекта, используя форму внутри другого проекта в том же решении.
Я надеюсь, что это помогает.
источник
Я искал решение той же проблемы, и снятие галочки с опции «Подписать сборку» работает для меня:
(как вы можете заметить, скриншот взят с VS2010, но, надеюсь, он кому-нибудь поможет)
источник
Я написал инструмент для автоматической сборки знаков со строгими именами, в том числе тех, для которых у вас нет исходного кода, или проектов, которые были заброшены. Он использует многие из методов, описанных в ответах, простым способом без каких-либо недостатков или недостатков существующих инструментов или устаревших инструкций.
http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer
Надеюсь, что это поможет всем, кому нужно подписать стороннюю сборку, не прыгая через обручи, чтобы добраться туда.
источник
Вы можете использовать неподписанные сборки, если ваша сборка также не подписана.
источник
Подписание сторонней сборки у меня сработало:
http://www.codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name
РЕДАКТИРОВАТЬ : я узнал, что полезно опубликовать шаги в случае, если связанная статья больше не действительна. Вся заслуга Hiren Khirsaria :
Запустите командную строку visual studio и перейдите в каталог, где находится ваша DLL.
For Example my DLL is located in
D:/hiren/Test.dll
Теперь создайте файл IL, используя команду ниже.
D:/hiren> ildasm /all /out=Test.il Test.dll
(эта команда генерирует библиотеку кода)Создайте новый ключ, чтобы подписать ваш проект.
D:/hiren> sn -k mykey.snk
Теперь подпишите вашу библиотеку, используя
ilasm
команду.D:/hiren> ilasm /dll /key=mykey.snk Test.il
источник
Как подписать стороннюю сборку без подписи
sn
ildasm
иilasm
sn –k Cool.Library.snk
создать новую пару ключейildasm Cool.Library.dll /out:Cool.Library.il
разобрать библиотекуmove Cool.Library.dll Cool.Library.unsigned.dll
сохранить оригинальную библиотеку в качестве резервной копииilasm Cool.Library.il /dll /resource=Cool.Library.res /key=Cool.Library.snk
собрать библиотеку со строгим именемpowershell -command "& {[System.Reflection.AssemblyName]::GetAssemblyName($args).FullName} Cool.Library.dll"
чтобы получить сборку полностью квалифицированным именем. Этот бит вам понадобится, если вам нужно ссылаться на DLL во внешних файлах конфигурации, таких как web.config или app.config.источник
У меня была эта проблема для приложения, которое было строго названо, затем пришлось изменить его, чтобы ссылаться на сборку с неназванным именем, поэтому я снял флажок «Подписать сборку» в разделе «Подписание свойств» проекта, но он все еще жаловался. Я подумал, что это должен быть артефакт где-то, вызывающий проблему, поскольку я все делал правильно, и это было именно так. Я нашел и удалил строку: [assembly: AssemblyKeyFile ("yourkeyfilename.snk")] из его файла assemblyInfo.cs. Тогда никаких нареканий после этого.
источник
Я столкнулся с этим с DLL ServiceStack, которую я установил с Nuget. Оказывается, был еще один набор доступных библиотек, которые были помечены как подписанные. Не будет ответом для всех, но вам, возможно, просто нужно проверить существующую подписанную версию вашей сборки.
источник
Для меня проблема заключалась в том, что у меня было два одинаковых пакета NuGet, установленных с разными версиями.
источник
Снятие флажка «Подписать сборку» под «Подписыванием» вкладке работает, как сказал @Michal Stefanow.
Добавьте сюда самый простой способ подписать свои собственные файлы и / или файлы других людей. Вам просто нужно добавить эту строку под «Командная строка события после сборки»:
Вы можете подписывать файлы других людей или свои собственные файлы и столько, сколько хотите.
источник
Старый вопрос, но я удивлен, что еще никто не упомянул ilmerge. ilmerge от Microsoft, но не поставляется с VS или SDK. Вы можете скачать его здесь, хотя. Существует также хранилище github . Вы также можете установить из Nuget:
Использовать:
При необходимости вы можете сгенерировать свой собственный ключевой файл, используя sn (из VS):
источник
1> Register-PackageSource -ProviderName NuGet -Name NuGet -Location http://www.nuget.org/api/v2
2> Install-Package -Name ILMerge
3> $env:path += ';C:\Program Files\PackageManagement\NuGet\Packages\ilmerge.2.14.1208\tools'
4> ILMerge.exe .\packages\WireMock.Net.1.0.4.2\lib\net452\WireMock.Net.dll /keyfile:key.snk /out:WireMock.Net.dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /ndebug /lib:.\packages\Newtonsoft.Json.10.0.3\lib\net45\ /lib:.\packages\Handlebars.Net.1.9.0\lib\net40 /lib:.\packages\SimMetrics.Net.1.0.4\lib\net45 /lib:.\packages\Microsoft.Owin.2.0.2\lib\net45 /lib:.\packages\Owin.1.0\lib\net40 /lib:.\packages\Microsoft.Owin.Hosting.2.0.2\lib\net45 /lib:.\packages\MimeKitLite.2.0.1\lib\net45 /lib:.\packages\XPath2.1.0.5.1\lib\net40 /lib:.\packages\RestEase.1.4.4\lib\net45
Ситуация: у вас был проект A, B, C, D в решении X, Y
Проект A, B, C в X Проект A, C, D в Y
Мне нужно использовать проект C в проекте A, но позже я не буду использовать. В отладочном проекте bin A был C.dll.
Если я компилирую решение X, все хорошо (в этом решении я удаляю ссылку A -> C.), но в решении Y я получаю эту проблему.
Решение - удалить C.dll в проекте A bin Debug.
источник
Сначала убедитесь, что все пакеты nuget имеют одинаковую версию для всех проектов в вашем решении. Например, вы не хотите, чтобы один проект ссылался на NLog 4.0.0.0, а другой - на NLog 4.1.0.0. Затем попробуйте переустановить пакеты nuget с
Update-Package -reinstall
У меня было 3 сторонних сборки, на которые ссылалась моя сборка А, и только 2 были включены в Ссылки моей сборкой Б, которая также ссылалась на А.
Отсутствующая ссылка на стороннюю сборку была добавлена командой пакета обновления, и ошибка исчезла.
источник