由於使用AppDomain.AssemblyResolve事件leppie's suggestion,我能夠解決類似的問題。這裏是我的代碼如下所示:
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程序集中的任何類。
我試圖做到這一點在ASP.NET應用程序的情況下。我可以在哪裏連接到AppDomain.CurrentDomain.AssemblyResolve事件?在應用程序事件級別(即global.asax)? – 2011-02-24 03:58:08
我想你應該能夠從任何地方的'AssemblyResolve'註冊事件。 'LoadStuff()'方法沒有什麼特別之處。如果您決定在每次加載程序集時註冊事件,請記住在完成後取消註冊。 – 2011-02-24 17:05:23
超棒的男人。正是我在找什麼 – Jupaol 2013-01-17 18:05:32