我正在嘗試使用AppDomain.AssemblyResolve
事件處理異常,同時解析在運行時加載的某些dll的程序集(SerializationException for dynamically loaded Type)。使用AppDomain.AssemblyResolve事件
當事件被觸發,我加載在我的目錄中的所有DLL文件,並創建一個Assembly
數組,然後我用這個方法來獲取Assembly
包含I型註明:
public static Assembly GetAssemblyContainingType(String completeTypeName, Assembly[] assemblies)
{
Assembly assembly = null;
foreach (Assembly currentassembly in assemblies)
{
Type t = currentassembly.GetType(completeTypeName, false, true);
if (t != null)
{
assembly = currentassembly;
break;
}
}
return assembly;
}
的問題是,這代碼僅適用於AssemblyQualifiedName
,並且該事件提供的ResolveEventArgs.Name
不太有用。
你能告訴我一些解決方法嗎?
當它被觸發時,是否有辦法將其他參數傳遞給事件?
不預加載程序集,不需要AssemblyResolve事件處理程序? – 2012-02-07 18:02:26
@mikez據我所知,使用'Assembly.Load(assemblyName)'加載一個程序集不會自動使它可用於應用程序域的程序集解析代碼(除非該代碼可以使用默認分辨率訪問程序集處理)。這段代碼從工作系統中解除(我刪除了錯誤處理代碼,例如在'additional.TryGetValue(e.Name,out res)'調用周圍以簡化一些事情)。當我刪除'ResolveAssembly'鉤子時,我的工作系統停止工作:) – dasblinkenlight 2012-02-07 18:16:57
當您構建字典時,請使用AssemblyName.GetAssemblyName()而不是Assmebly.Load將程序集名稱命名爲文件名映射並避免無條件加載所有的程序集。 –
2012-05-02 23:15:57