Как бы я проинформировал изолированное приложение о местонахождении зависимых DLL? - PullRequest
0 голосов
/ 29 июля 2010

У меня есть пара изолированных приложений, которые я пишу, все они основаны на dll, которые также написаны мной и командой. Все было хорошо, когда у нас было всего несколько библиотек, но каталог выходных данных сборки был довольно загроможден и труден для навигации. В конечном итоге я хотел бы, чтобы каталог выходной сборки содержал следующую структуру:

  • $ (OutDir)
    • - (Application.exe)
    • - (Application.exe)
    • - Папка Libs
      • - (LibA.dll)
      • - (LibB.dll)
      • (и т. Д.)

Есть ли способ, чтобы приложения просматривали "Папку Libs" этих библиотек во время выполнения, используя что-то вроде файлов манифеста?

1 Ответ

1 голос
/ 10 сентября 2010

Порядок поиска в Dynamic-Link Library описывает, какие возможности вы можете изменить для поиска. Он описывает порядок поиска и упоминает манифесты и функцию SetDllDirectory () как возможности изменения порядка поиска.

Хотя SetDllDirectory выглядит многообещающе, он будет надежно работать только в том случае, если вы динамически загружаете свои библиотеки DLL, чего вы не делаете из того, что я понимаю.

Теперь, что касается использования манифестов: Файлы конфигурации приложения говорит об атрибуте privatePath, который можно использовать для [указать] относительные пути подкаталогов в базовом каталоге приложения, которые могут содержать сборки . Для меня это звучит так, как будто это должно работать только для параллельных сборок, но вы можете попробовать.

Я с готовностью признаю, что никогда не беспокоился о манифестах (за исключением того, что вам нужно знать в VS 2005, чтобы вообще что-либо запускать), и я бы рекомендовал пропустить идею подкаталогов библиотеки для неявно загруженные библиотеки DLL и положить их в каталог приложения и покончим с этим. Для явно (динамически) загруженных библиотек DLL вы можете просто определить их полный путь из пути к исполняемому файлу и указать его в LoadLibrary (), и вам не нужно беспокоиться о пути поиска.

...