У меня есть проект 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
?)
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>