Как мне избежать копирования сторонних библиотек C DLL?

#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 во время запуска. В любом случае спасибо 🙂