Почему при попытке добавить ссылку появляется сообщение «Невозможно создать сборку: ссылка на сборку ... не имеет строгого имени»? - PullRequest
5 голосов
/ 01 июня 2011

Я хочу включить значок в системном трее в мой проект WPF и нашел этот ресурс:

http://www.hardcodet.net/projects/wpf-notifyicon

, который выглядит прекрасно, но написан дляC # и я использую VB.net для этого проекта.Я скачал его проект и создал notifyicon как DLL, а затем добавил его в качестве ссылки на мой проект.

Выдает ошибку:

Невозможно создать сборку: у ссылки на сборку 'Hardcodet.Wpf.TaskbarNotification' нет строгого имени

Поэтому я пытаюсь найти лучший способ продолжить.Мне нужно строго назвать его или есть лучший способ сделать это?

Ответы [ 3 ]

14 голосов
/ 01 июня 2011

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

Если ваша сборка со строгим именем ссылается на сборку со слабым именем, эта гарантия не может быть выполнена, поскольку ее зависимостиможет быть заменено самозванцами.Вот почему вы получаете сообщение об ошибке компиляции.

Ваши варианты:

  1. Удалите строгое имя из вашей сборки.
  2. Строго назовите третье лицокод во время компиляции.Это легко в вашем случае, потому что вы строите из исходного кода.
  3. Строго назовите сторонние двоичные файлы, используя ILMerge .Это привлекательный вариант, если вы строите не из источника, а третье лицо не подписало свою сборку.
10 голосов
/ 01 июня 2011

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

Поскольку вы уже его создаете, вы можете просто добавить строгое имя в проект.свойства и восстановить.После того, как вы это сделаете, он должен работать (вообще не меняя код).

1 голос
/ 11 октября 2018

Проще говоря, это означает, что у вас есть проект с именем AssemblyA, который ссылается на AssemblyB. AssemblyA подписана, AssemblyB нет.

Вам нужно будет либо подписать AssemblyB, либо не подписывать AssemblyA.

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