這裏是展示AssemblyResolve如何可能被用來解決您的組件(如每裏德Copey的答案)的代碼片段:
// register to listen to all assembly resolving attempts:
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
// Check whether the desired assembly is already loaded
private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
string desiredAssmebly = args.Name;
if (desiredAssembly.Equals("NameUsedToLoadMyAssembly")){
return Assembly.LoadFrom(myAssemblyPath);
}
return null;
}
此外,注意,AssemblyResolve的MSDN頁指出:
從.NET Framework 版本4開始, ResolveEventArgs.RequestingAssembly 屬性返回裝配,即 請求的裝配加載可能爲 無法解析...
如果知道程序集相對於請求程序集的位置,可以使用此方法。
謝謝里德。一些注意事項:即使AppDomain.AppendPrivatePath已被棄用,以支持AppDomainSetup.PrivateBinPath,我只能使用第一個。修改後,AppDomainSetup.PrivateBinPath保持爲空。 AppDomain.AppendPrivatePath允許我添加任何路徑,它是AppDomain.BaseDirectory的子項,在很多情況下這是足夠的,不是我的,因爲我的BaseDirectory是DevEnv目錄。另一種解決方案,AppDomain.AssemblyResolve就夠用了。注意事件僅在.NET無法自行解析程序集時調用。如果所有處理程序都返回null,則拋出異常 – 2010-10-17 12:07:09