Подтвердить что ты не робот

Загрузить ссылку DLL из другой папки?

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

4b9b3361

Ответ 1

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

Личный путь bin для AppDomain не может быть изменен после создания AppDomain (AppDomain.AppendPrivatePath устарел), если вы не хотите создавать новый AppDomain, вы можете изменить элемент исследования в файле App.config.

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

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

Другая возможность - разместить эту dll (и зависимости) в GAC.

Ответ 2

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

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

Ответ 3

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

Assembly.Load("Assembly.Name")

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