загрузить ссылку на DLL из другой папки? - PullRequest
22 голосов
/ 05 января 2010

У меня есть консольное приложение .NET, которое ссылается на DLL. Он работает нормально, если DLL находится в той же папке, что и EXE, но я хотел бы поместить DLL в другую папку. Как я могу это сделать?

Ответы [ 3 ]

19 голосов
/ 06 января 2010

Если dll находится в подпапке, вы можете добавить эту папку в Личный путь AppDomain .

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

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

Если вы хотите разрешить зависимости, вы можете добавить обработчик в AppDomain.AssemblyResolve и получить необходимую сборку в вашей конкретной папке.

Другая возможность состоит в том, чтобы поместить эту dll (и зависимости) в GAC.

2 голосов
/ 06 января 2010

Если DLL загружается динамически, просто укажите полный путь к ней. Если он статический или вам это нравится, добавьте путь к библиотеке в переменную окружения PATH. Да, эта реликвия DOS все еще существует.

Кроме того, прочитайте документацию по API LoadLibrary () для лучшего понимания загрузки DLL.

0 голосов
/ 06 января 2010

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

Assembly.Load("Assembly.Name")

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

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