Как определить рабочие каталоги для зависимостей DLL в Visual Studio / C # - PullRequest
2 голосов
/ 25 августа 2010

У меня есть исполняемый файл, который я запускаю, например, из C :.Исполняемый файл ссылается на некоторые библиотеки DLL из другого каталога, скажем, C: \ MyDLLs.Проблема в том, что эти ссылочные библиотеки DLL снова зависят от других библиотек DLL, которые хранятся в другом каталоге.Могу ли я сообщить Visual Studio, где искать эти недостающие библиотеки DLL?Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 25 августа 2010

Вы можете ссылаться на сборки вне правил загрузки сборок вашего приложения, установив эти значения в конфигурации. Вот пример файла конфигурации из этой статьи Microsoft KB :

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>
            <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Вы используете элемент <codeBase>, чтобы сообщить своему приложению, где искать.

Чтобы это работало, необходимо сделать сборку со строгим именем (используйте инструмент sn.exe ).

Также полезно понять, как среда выполнения разрешает ссылки на сборки , и, возможно, вы можете воспользоваться этим вместо того, чтобы пройти через все циклы, чтобы использовать <codeBase>.

1 голос
/ 25 августа 2010

У меня уже была эта проблема, и я создал сценарий пост-сборки, который копирует все необходимые библиотеки DLL в каталог моего исполняемого файла.

Что-то вроде: copy "$ (ProjectDir) Resources \ DLLs \ yourDLL.dll"" $ (TargetDir) yourDLL.dll "

...