Является ли использование Assembly.Load статической или динамической ссылкой? - PullRequest
8 голосов
/ 10 августа 2010

Каковы последствия и предлагаемые сценарии для использования?

Ответы [ 3 ]

10 голосов
/ 10 августа 2010

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

EDIT:

Из документа MSDN:

Компилятор записывает статические ссылки в метаданных манифеста сборки в время сборки.

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

2 голосов
/ 10 августа 2010

В отношении:

Каковы последствия и предлагаемые сценарии для использования?

Обычно, если я использую Assembly.Load(), это потому, что яразработка подключаемой системы.Динамические ссылки облегчают включение сборок, которые не обязательно являются частью моей сборки.

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

Короче говоря, использование динамически загружаемых сборок - большая работа;однако это может сделать приложение более гибким, позволяя пользователям разрабатывать подключаемые модули.Просто взвесьте компромисс между ожидаемой гибкостью динамических ссылок (что может и не быть обязательным) и поддержкой Visual Studio во время разработки статических ссылок.

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

0 голосов
/ 10 августа 2010

Динамная ссылка, как указано в MSDN (http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx) ссылается на динамическую ссылку как загрузку ссылки только с достаточной информацией, которую среда выполнения должна искать для загрузки загружаемой сборки. Со статическими ссылками - местоположение сборокGAC, директория приложения и т. Д.) Известны и могут быть выполнены с помощью Assembly.load.

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