Можно настроить пути проверки сборок, используя элемент конфигурации :
Указывает базовые подкаталоги приложений для общеязыковой среды выполнения для поиска при загрузке сборок.
Пример из MSDN:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
Однако, если рассматриваемые сборки находятся за пределами базы приложения («которая является корневым каталогом, где выполняется приложение»), у вас есть элемент конфигурации :
Указывает, где общеязыковая среда выполнения может найти сборку.
Пример из MSDN:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<codeBase version="2.0.0.0"
href="http://www.litwareinc.com/myAssembly.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Точную информацию о том, как среда выполнения находит сборки, вы можете найти в этой статье MSDN .
Как указывал OP, к сожалению, элемент codeBase являетсяполезная опция только для строго именованных сборок.Для частных собраний вам нужен обходной путь.Некоторые жизнеспособные идеи можно найти в этом обсуждении , такие как:
Я протестировал последнее и могу подтвердить, что оно работает:
AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
Assembly.LoadFile(Path.Combine(Settings.Default.AssemblyPath, Path.ChangeExtension(e.Name.Substring(0, e.Name.IndexOf(',')), ".dll")));