#c# #assemblies #environment
#c# #сборки #Окружающая среда
Вопрос:
Я разрабатываю проект и хочу отделить общие сборки от папки проекта
Program Files
My Company
Commons
* Assembly1.dll
* Assembly2.dll
* Assembly3.dll
* Assembly4.dll
Project1
* MyProject1.exe
* MyProject1.exe.config
Project2
* MyProject2.exe
* MyProject2.exe.config
пытаюсь заставить проекты загружать сборки из папки «Commons», поэтому я меняю системную среду %PATH% для поиска DLL.
%PATH% = c:Program filesMy CompanyCommons;%PATH%
но они не ищут среду Path (мониторинг с помощью ProcessMonitor)
Кто-нибудь может показать мне, как определить путь поиска для сборок из среды %PATH%.
Ответ №1:
string path = System.Environment.GetEnvironmentVariable("Path");
var folders = path.Split(';');
foreach (var folder in folders)
{
foreach (var file in Directory.GetFiles(folder, "*.*"))
{
// found files
}
}
Выполните поиск в AppDomain.AssemblyResolve
событии, чтобы найти библиотеки DLL при запуске вашего приложения. Более подробная информация об этом событии здесь: http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx
Комментарии:
1. Обратите внимание, что переменная path может содержать несуществующие каталоги (например, если приложение было удалено без его очистки), поэтому вам следует проверить это с помощью Directory.Exists(), прежде чем выполнять Directory . GetFiles().
Ответ №2:
Я не верю, что dotNET полагается на переменную окружения path при привязке сборок.
Смотрите http://ondotnet.com/pub/a/dotnet/2003/03/17/bindingpolicy.html для политики привязки к dotNET.
Особенно полезным может оказаться элемент здесь: http://msdn.microsoft.com/en-us/library/efs781xb(v=VS.100).aspx
Комментарии:
1. я уже пытался установить privatePath в app.config, но путь должен находиться в папке проекта для поиска. если я установлю его «.. / Commons», он не будет отображаться в верхних папках. Я хочу, чтобы myapp искал библиотеки DLL через среду %PATH%. Спасибо
2. Я обнаружил, что очень просто сохранить частные сборки и GAC в качестве единственных путей, содержащих сборки, на которые ссылаются. Нет ничего плохого в том, чтобы сохранить пару копий библиотек DLL, на которые даны ссылки. Преимущество заключается в том, что совершенно ясно, какая сборка будет использоваться вашим приложением.