我在用下面的代碼一些問題:Type.IsSubclassOf()不適用於AppDomains?
private class ClientPluginLoader : MarshalByRefObject
{
public bool IsPluginAssembly(string filename)
{
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomainReflectionOnlyAssemblyResolve);
Assembly asm = Assembly.ReflectionOnlyLoadFrom(filename);
Type[] types = asm.GetTypes();
foreach (Type type in types)
{
if (type.IsSubclassOf(typeof(ClientPlugin)))
{
return true;
}
}
return false;
}
}
代碼通過,我已經通過我的自定義應用程序域的CreateInstanceFromAndUnwrap創建代理稱爲()。這意味着IsPluginAssembly()在我的自定義應用程序域的上下文中執行。
問題是,對IsSubclassOf()的調用總是返回false,即使它應該恕我直言返回true。所討論的「類型」確實從ClientPlugin繼承而來 - 這是毫無疑問的。
ClientPlugin在不同的私有程序集中定義,我正在手動解決這個問題,這在上面的代碼片段中很明顯。
我把一個斷點在if (type.IsSubclassOf(...))
線,並確認這種表達是錯誤的:
type.BaseType == typeof(ClientPlugin)
在另一方面,這種表達是真實的:
type.BaseType.FullName == typeof(ClientPlugin).FullName
這怎麼可能?這是怎麼回事?
更新:肯特Boogaart指出我正確的方向。我在網上搜索了一下,並碰到this博客文章。看來我將不得不解決我的Load/LoadFrom/ReflectionOnlyLoadFrom衝突,以使這項工作。
我有這個問題,我有兩個相同的DLL在兩個文件夾中的副本。當手動執行「IsSubclassOf」時,我收到了以下錯誤消息:「ServiceCore.dll」和「ServiceCore.dll」中都存在類型「ServiceCore.BaseService」 – vpalmu 2016-08-04 06:57:19