Сильные Подписанные Собрания - PullRequest
26 голосов
/ 06 апреля 2009

У меня есть проект, который я сделал в Visual Basic 2008 Express. Я преобразовал его из чужого C # проекта, но он работает. У него есть несколько зависимостей DLL. Я пошел, чтобы опубликовать свой проект, чтобы я мог установить его на другом компьютере, и для каждой DLL я получаю сообщение об ошибке: «Сборка должна быть строго подписана, чтобы быть отмеченной как обязательное условие». Я провел некоторое исследование, но не нахожу много, и то, что я нашел, я действительно не понимаю. Что означает эта ошибка? Каков наилучший способ решить это? Еще одна вещь: мне потребовалось ДОЛГОЕ время, чтобы я мог правильно ссылаться на все мои библиотеки, поэтому я предпочитаю, чтобы решение НИЧЕГО не имело с перемещением DLL, потому что это, вероятно, нарушит функциональность моего основного проекта. *

Ответы [ 10 ]

49 голосов
/ 06 апреля 2009

Если вы публикуете через ClickOnce, перейдите на страницу публикации и нажмите «Файлы приложений». Оттуда вы должны увидеть список ваших DLL. Убедитесь, что для тех, кто доставляет вам неприятности, их статус публикации помечен как «Включен», а не как «Необходимое условие».

Что означает это сообщение об ошибке, так это то, что текущие параметры публикации будут ожидать, что все рассматриваемые сборки будут присутствовать в глобальном кэше сборок на целевом компьютере до того, как будет произведена установка. Поскольку все сборки в GAC должны иметь строгую подпись, любая сборка, помеченная как обязательное условие, но не имеет строгой подписи, выдаст эту ошибку.

6 голосов
/ 23 августа 2012

Обходной путь более прост:

  1. Перейти к вашему проекту.
  2. Щелкните правой кнопкой мыши и выберите Свойства.
  3. Перейдите на вкладку «Безопасность».
  4. Снимите флажок Включить параметры безопасности ClickOnce.

Если вы не развертываете это приложение через ClickOnce, вам не нужно StrongName своих сборок.

4 голосов
/ 06 апреля 2009

Сборки со строгими именами - это в основном сборки, подписанные криптографическим ключом. Это довольно легко сделать с помощью Visual Studio и не требует переупорядочения ваших зависимостей.

Я использую неэкспресс Visual Studio, поэтому шаги могут немного отличаться для вас.

  • Щелкните правой кнопкой мыши по проекту и выберите свойства
  • Нажмите на вкладку «Подписание»
  • Отметьте «Подписать сборку»
  • В поле со списком выберите «<Новый ...>»
  • Завершить работу мастера
  • Перестройка
3 голосов
/ 06 апреля 2009

Проверьте эту ссылку ... в ней есть инструкции по подписанию сборки под строгим именем:

MSDN: Подписание сборки под строгим именем

2 голосов
/ 06 апреля 2009

Чтобы создать строгое имя, просто перейдите в командную строку SDK или командную строку Visual Studio 200X, затем введите следующую команду

sn -k sgKey.snk

Подробнее см.

Затем привяжите строгое имя к вашей сборке, выполнив следующую команду

al /out:MyAssembly.dll MyOldAssembly.dll /keyfile:sgKey.snk

См. эту ссылку для подробностей

1 голос
/ 09 июля 2010

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

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

0 голосов
/ 07 октября 2013

У меня тоже была эта проблема. В моем случае в моем решении была ссылка на blabla.dll, но blabla.dll также использовалась в другом.dll, на который я ссылался в моем проекте.

При проверке версий обоих blabla.dll они не совпадали. Таким образом я обновил another.dll с правильным blabla.dll и затем сослался на новый another.dll в моем решении. Ошибка исчезла.

Короче говоря: я использовал 2 версии blabla.dll

Я надеюсь, что это имеет смысл, если не дай мне знать. :)

Проверьте мой блог для более подробного объяснения: Статья в блоге

С уважением, Джейкоб Иедема

0 голосов
/ 10 ноября 2012

Использование Решение Адама Робинсона позволило мне опубликовать, но я обнаружил, что пользователи не могут установить проект после его публикации, поскольку система конечного пользователя будет жаловаться на невозможность установки, отмечая место на жестком диске , Поскольку это казалось маловероятным, чтобы быть основной причиной, я углубился в это.

Очевидно, что причиной моей проблемы было то, что одна из моих ссылок также ссылалась на .dll, которую использовал мой проект, но на другую версию. У ClickOnce такого не было, и он отказался копировать вторую версию .dll в систему пользователя, ссылаясь на уже существующую версию. Исправив это так, что .dll и проект ссылались на одну и ту же версию другого .dll, удалили ошибку и исправили проблему установки.

0 голосов
/ 10 декабря 2011

Я обнаружил, что моя проблема в файле .csproj

<Reference Include="OtherProjectNothingToDo">
  <HintPath>..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe</HintPath>
</Reference>

Затем я удалил его с помощью блокнота, и теперь все в порядке.

0 голосов
/ 30 июня 2010

Убедитесь, что Target Framework на самом деле установлен на 3,5 или любой другой фреймворк, на который вы хотите ориентироваться. Иногда происходит ошибка при неправильной настройке.

...