Существует несколько способов обмена сборками между приложениями. Хотя наиболее рекомендуемый вариант - через GAC, у вас также есть следующие варианты:
Зондирование
Вы можете указать подкаталог в базовом каталоге приложения для поиска сборок. Я думаю, что это недопустимо для вас, потому что это недопустимо для разных приложений.
CodeBase
Вы можете указать Uri, в котором находятся общие сборки. В вашем случае эти сборки должны иметь строгое имя, чтобы они могли находиться в общем общем каталоге.
Также учтите, что тег CodeBase
можно использовать только в файлах конфигурации компьютера или политики издателя.
<?xml version="1.0" encoding="utf?8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas?microsoft?com:asm.v1">
<dependentAssembly>
<codeBase version="1.0.0.0"
href= "file:///c:\Shared Assemblies\MySharedAssembly.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
AssemblyResolver
Это, безусловно, наименее сложный механизм поиска общих сборок. По сути, ApplicationDomain вызывает событие, когда он терпит неудачу в разрешении сборки. Это событие может быть перехвачено вашим приложением, чтобы вручную вернуть нужную сборку из любого места.
class Example
{
public static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
// Uses MySharedAssembly
Foo();
...
}
private static Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{
// I guess requested assemblyName is located in this file.
var file = @"c:\Shared Assemblies\MySharedAssembly.dll";
try
{
return Assembly.LoadFile(file);
}
catch (Exception)
{
...
}
return null;
}
}