Может ли ссылочная DLL быть загружена, даже если она не вызывается? - PullRequest
2 голосов
/ 01 октября 2009

Окр .: .NET / VS2008

Привет всем,

Мое приложение использует стороннюю сборку DLL, отдельно установленную на некоторых системах (четко обозначенных), но не на всех.

Это означает, что в некоторых системах DLL не существует, следовательно, не должна вызываться. Чтобы решить эту проблему, у меня есть 2 версии приложения (используя 2 конфигурации) для 2 вариантов использования. В одном из них все обращения к DLL выполняются # if'ed.

Поскольку в приложении нет вызовов к скомпилированной DLL-библиотеке (они # если отключены), можно ли предположить, что приложение не будет пытаться загрузить DLL, даже если на нее есть ссылки?

Или я также должен исключить ссылку?

Примечание. В ответ на комментарий womp в этот вопрос .

ТИА

Ответы [ 4 ]

3 голосов
/ 01 октября 2009

IIRC, компилятор C # будет пропускать ссылки на библиотеки DLL, которые фактически никогда не используются в коде. Таким образом, если весь код находится внутри #if s, ссылка на dll не будет присутствовать в вашем скомпилированном приложении, и dll никогда не будет загружена.

Кстати, вы можете проверить это с помощью Reflector. Просто перетащите скомпилированное приложение в Reflector и посмотрите на узел References. Я думаю, что ILDASM также предоставляет эту функцию.

Предупреждение: DllImport s и динамическая загрузка типов (например, Type.GetType("type,dll")) будут динамически загружать dll без знания или заботы компилятора C #. Но опять же, если внутри надлежащих #if с, ничего не будет загружено.

0 голосов
/ 01 октября 2009

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

0 голосов
/ 01 октября 2009

Почему бы не загрузить сборку динамически, если это необходимо / доступно? И потом, если он будет добавлен позже, вы можете просто использовать его? Вам также понадобится только одна версия вашего приложения.

0 голосов
/ 01 октября 2009

Вы в безопасности со ссылкой, но без фактической DLL, если вы никогда (очевидно) не создаете экземпляр класса и не ссылаетесь на него И никогда не ссылаетесь на класс в каком-либо созданном объекте или объекте ссылки.

Обычно ваша DLL загружается при первом запуске конструктора класса ссылочного класса.

НТН Jan

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