Установить пользовательский путь к DLL, на который Ссылаются?

У меня есть проект C# (назовите его MainProj) какие ссылки несколько других проектов DLL. Путем добавления этих проектов к MainProjссылки, это создаст их и скопирует их получающийся DLL в рабочий каталог MainProj.

То, что я хотел бы сделать, имеют, они сослались на DLL быть расположенными в подкаталоге MainProjрабочий каталог, т.е. MainProj/bin/DLLs, а не сам рабочий каталог.

Я не очень опытный программист C#, но прибывающий из мира C++, я предполагаю, что один подход должен был бы удалить ссылки проекта и явно загрузить необходимый DLL путем и именем файла (т.е. в C++, LoadLibrary). То, что я предпочел бы делать однако, если бы существует путь, должно было бы установить своего рода "ссылочный двоичный путь", таким образом, они были бы все автоскопированы в этот subdir, когда я создаю (и затем ссылаюсь оттуда без меня бывший должный явно загрузить каждого). Действительно ли такая вещь возможна?

В противном случае что является предпочтительным методом в C# для выполнения то, что я после (т.е. что-то с Assembly.Load / Assembly.LoadFile / Assembly.LoadFrom? Что-то в AppDomain возможно, или System.Environment?)

49
задан BartoszKP 26 October 2015 в 14:55
поделиться

1 ответ

From this page (untested by me):

Somewhere in your program's initialization (before you access any classes from a referenced assembly) do this:

AppDomain.CurrentDomain.AppendPrivatePath(@"bin\DLLs");

Edit: This article says AppendPrivatePath is considered obsolete, but also gives a workaround.

Edit 2: Looks like the easiest and most kosher way to do this is in the app.config file (see here):

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin\DLLs" />
    </assemblyBinding>
  </runtime>
</configuration>
78
ответ дан 7 November 2019 в 11:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: