Ссылка на сборку без сильного имени

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

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

Ответ 1

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

Подпишите сборку, на которую вы ссылаетесь, или не подписываете сборку, ссылающуюся на нее.

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

Если это так, что вы действительно не можете либо добавить сильное имя к тому, на которое ссылаетесь, либо удалить сильное имя от того, которое делает ссылку (извините за долгое время), тогда вам придется посмотреть привязка класса во время выполнения через отражение, а затем доступ к нему через общую базу или интерфейс - вообще не идеальный; или, что еще хуже, на самом деле ссылается на него посредством отражения или dynamic.

Ответ 2

Вся суть сильного имени заключается в том, что вы знаете, какие DLL загружаются. Вы не можете добавить сильное имя в вашу dll, если вы ссылаетесь на то, что не имеет сильного имени, поскольку что-то может быть загружено вместо dll, о котором вы думаете (до тех пор, пока совпадения имен). Это полностью побеждает гарантии, что сильное имя предназначено для обеспечения.

Итак (один из):

  • не добавляйте сильное имя в свою DLL (для большинства внутренних вещей вам просто не нужен)
  • или; перестройте dll, на который вы ссылаетесь, с сильным именем
  • или; загрузить дополнительную dll только через отражение (yuck)