Почему я получаю 'Assembly' * .dll 'должна быть подписана строго, чтобы быть отмеченной как обязательное условие.'? - PullRequest
260 голосов
/ 27 февраля 2011

Я пытаюсь скомпилировать свой плагин Excel, используя C # 4.0, и начал сталкиваться с этой проблемой при сборке моего проекта в Visual Studio. Важно сказать вам, что у меня не было этой проблемы раньше. Что может вызвать это?

Ответы [ 26 ]

264 голосов
/ 15 января 2012

Когда у меня возникла эта проблема, я решил ее, отключив «Включить настройки безопасности ClickOnce».

Меню: Проект |«Название проекта» Свойства ... |Вкладка Безопасность |Флажок «Включить настройки безопасности ClickOnce».

233 голосов
/ 09 марта 2011

Полагаю, вы не работаете со сборками со строгими именами.У меня была эта ошибка, когда два проекта ссылаются на несколько разные версии одной и той же сборки, а более зависимый проект ссылается на эти проекты.В моем случае было принято решение удалить ключ и информацию о версии из имени сборки в файлах .csproj (в любом случае это не имело значения), а затем выполнить чистую сборку.

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

NuGet

С NuGet легко попасть в эту ситуацию, если:

  1. Вы устанавливаете пакет в один проект в своем решении.
  2. Новая версия этого пакета развертывается в источнике пакета.
  3. Вы устанавливаете его в другой проект в том же самом проекте.решение.

В результате в вашем решении два проекта ссылаются на разные версии сборок этого пакета.Если один из них ссылается на другой и является приложением ClickOnce, вы увидите эту проблему.

Чтобы исправить это, введите команду update-package [package name] в консоли диспетчера пакетов Nuget, чтобы довести все до игрового уровняполе, в котором проблема исчезнет.

Вы должны управлять пакетами NuGet на уровне решения, а не на уровне проекта, если нет веской причины не делать этого.Управление пакетами на уровне решения позволяет избежать использования нескольких версий зависимостей.Если при использовании пользовательского интерфейса управления на вкладке Consolidated указано, что один или несколько пакетов имеют несколько версий, рассмотрите возможность объединения их в одну.

68 голосов
/ 14 ноября 2011

См. ответ .

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

21 голосов
/ 19 октября 2011

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

13 голосов
/ 03 мая 2012

Если вы изменили версию сборки или скопировали другую версию управляемой библиотеки, указанную в ошибке, возможно, вы также ранее скомпилировали файлы, ссылающиеся на неправильную версию.«Перестроить все» (или удалить папки «bin» и «obj», как упоминалось в предыдущем комментарии) должно исправить этот случай.

6 голосов
/ 28 апреля 2015

Если вы попробовали все остальные ответы в этом вопросе и у вас:

  • Есть несколько проектов в вашем решении
  • Есть проект (проект A), который ссылается на другой проект (проект)B), чей проект ссылается на пакет NuGet.
  • В проекте A вы использовали Intellisense / ReSharper для передачи ссылки на пакет NuGet, на который есть ссылка в проекте B (это может произойти, когда метод в проекте B возвращаеттип, предоставляемый пакетом NuGet, и этот метод используется в проекте A)
  • обновил пакет NuGet с помощью диспетчера пакетов NuGet (или CLI).

... у вас может быть отдельныйверсии DLL пакетов NuGet в ссылках ваших проектов, так как ссылка, созданная Intellisense / ReSharper, будет «нормальной» ссылкой, а не ссылкой NuGet, как ожидается, поэтому процесс обновления NuGet не найдет или не обновит ее!

Чтобы исправить это, удалите ссылку в Project A, затем используйте NuGet для ее установки и убедитесь, что пакеты NuGet во всехпроекты одной версии.(как объясняется в этом ответе )


Совет Pro Life:

Эта проблема может возникать, когда ReSharper / Intellisense предлагает добавить ссылку наваш проект.Он может быть гораздо более запутанным, чем в приведенном выше примере, с множеством переплетенных проектов и зависимостей, затрудняющих поиск.Если ссылка, предлагаемая ReSharper / Intellisense, на самом деле относится к пакету NuGet, используйте NuGet для его установки.

6 голосов
/ 27 февраля 2011

нужно подписать сборку ключом.Зайдите в свойства проекта под вкладкой подписи: enter image description here

6 голосов
/ 17 декабря 2012

Добавление моего решения для этой проблемы для тех, кому это может помочь.

У меня было решение ClickOnce, выдающее эту ошибку.Приложение ссылалось на общую папку «Libs» и содержало ссылку на проект Foo.dll.Хотя ни один из проектов в решении не ссылался на статическую копию Foo.dll в папке «Libs», некоторые ссылки в этой папке (т.е. мое решение имело ссылки на Libs\Bar.dll, которые ссылались на Foo.dll.)Поскольку приложение CO извлекло все зависимости из Libs, а также их зависимости, обе копии были включены в проект.Это приводило к ошибке выше.

Я исправил проблему, переместив мою Libs\Foo.dll статическую версию в подпапку Libs\Fix\Foo.dll.Это изменение заставило приложение ClickOnce использовать только версию проекта библиотеки DLL, и ошибка исчезла.

6 голосов
/ 03 октября 2013

Удаление DLL (где произошла ошибка) и повторное построение решения устранили мою проблему. Спасибо

5 голосов
/ 04 февраля 2016

Когда это случилось со мной с WindowsAPICodePack после того, как я обновил его, я просто перестроил решение.

Построить -> Восстановить решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...