Ответ 1
Благодаря предложению leppie использования AppDomain.AssemblyResolve событие, я смог решить подобную проблему. Вот как выглядит мой код:
public void LoadStuff(string assemblyFile)
{
AppDomain.CurrentDomain.AssemblyResolve +=
new ResolveEventHandler(CurrentDomain_AssemblyResolve);
var assembly = Assembly.LoadFrom(assemblyFile);
// Now load a bunch of types from the assembly...
}
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var name = new AssemblyName(args.Name);
if (name.Name == "FooLibrary")
{
return typeof(FooClass).Assembly;
}
return null;
}
Это полностью игнорирует номер версии и заменяет уже загруженную библиотеку для любой ссылки на библиотеку с именем "FooLibrary". Вы можете использовать другие атрибуты класса AssemblyName
, если хотите быть более строгими. FooClass
может быть любым классом в сборке FooLibrary.