Visual Studio: расположение DLL для выпуска

У меня есть проект, над которым я работаю, который ссылается на «Общую библиотеку (DLL)». В DevEnv он работает нормально, однако, если я создаю и пытаюсь организовать свои файлы, это не сработает. В основном, если у меня все настроено так:

  • C: \ Program Files \ MyApp \ MyApp.exe
  • C: \ Program Files \ MyApp \ Common \ WPF Commons.dll
  • C: \ Program Files \ MyApp \ Modules \ SomeModule.dll
  • и т.д

MyApp.exe не работает. Он пытается искать файлы DLL только в текущем каталоге. Итак, как мне настроить его в Visual Studio, чтобы при сборке приложение знало, что нужно искать библиотеки DLL в этих других папках?

О, и я понимаю, что это работает в Dev, потому что все библиотеки DLL помещены в одну папку. Я не хочу этого делать для выпуска: - /


person myermian    schedule 24.08.2010    source источник


Ответы (1)


Что вам нужно сделать, так это добавить частный путь зондирования в файл конфигурации приложения. Это сообщает CLR, в каких каталогах искать дополнительные сборки.

Пример app.config

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="Common;Modules"/>
      </assemblyBinding>
   </runtime>
</configuration>
person JaredPar    schedule 24.08.2010
comment
Есть ли альтернативное решение, кроме копирования файла MyApp.exe.config (который можно легко открыть и отредактировать постфактум)? - person myermian; 25.08.2010
comment
@myermian вы можете переопределить событие разрешения сборки, чтобы выполнить настраиваемое разрешение. Однако лично я бы выбрал app.config. app.config предназначен для редактирования постфактум, чтобы позволить администраторам устранить проблемы привязки и развертывания. Это стандартная практика - использовать его для поиска путей (Visual Studio фактически так и делает). - person JaredPar; 25.08.2010