#c# #c #dll #path #app-config
#c# #c #dll #путь #app-config
Вопрос:
У меня есть решение с проектом C и проектом c #, который вызывает методы из первого, используя Interop. Поскольку я хочу избежать любого жестко запрограммированного пути, я нашел способ задать путь к C dll в app.config. Моя проблема в том, что моя C dll зависит от других DLL-файлов, которые мне всегда приходится копировать в мою папку bin / Release и bin / Debug. Как я могу избежать этого? Было бы неплохо, если бы я мог указать путь к сторонним библиотекам DLL в app.config. Я нашел это
<probing privatePath="binDLLs" />
но, похоже, это работает только для подкаталогов приложений.
Ответ №1:
Не указывайте жесткое расположение DLL-файлов. Поместите каталоги в переменную %PATH%. Предполагая, что Windows в качестве среды считывает путь поиска для загрузки библиотек DLL.
РЕДАКТИРОВАТЬ: %PATH% — это переменная окружения, поэтому вы можете установить ее с помощью Environment.SetEnvironmentVariables. Я бы прочитал privatePath из файла конфигурации и использовал данный метод для добавления его в %PATH%. Чтение из файла конфигурации может быть выполнено с помощью класса ConfigurationManager.
Комментарии:
1. Я не использую пути жесткого кодирования, как я уже упоминал. Как я могу поместить свой каталог в переменную %PATH% во время установки? Я не вижу никакой подсказки в предоставленной вами ссылке.. Могу ли я указать путь в app.config? Это был бы мой предпочтительный вариант.
2. Я добавил ключ к <AppSettings> в app.config, который я прочитал с помощью AppSettingsReader во время запуска приложения (в Program.cs перед Application.Run()) и добавил его к переменной PATH с помощью EnvironmentSetEnvironmentVariable(). Это именно то, что я искал!
Ответ №2:
Я напишу следующую команду в вашем событии post build (поэтому вам не нужно выполнять ручную работу)
xcopy /s c:sourceyour_dll_folder c:your_target_folderbindebug
xcopy /s c:sourceyour_dll_folder c:your_target_folderbinRelease
Вот свойства местоположения события после сборки вашего проекта
Комментарии:
1. Хорошо, я думаю, это тоже работает, но я предпочитаю способ без копирования, устанавливая переменную PATH во время запуска. В любом случае спасибо 🙂