【发布时间】:2014-12-30 15:56:25
【问题描述】:
我有包含 CustomSettings 提供程序 MySettingProvider 的程序集 A。此程序集由本机进程创建为 COM 对象,然后 CLR 尝试使用 Type.GetType 调用按名称解析提供程序类型。
如果我尝试直接在 A 的启动代码中解析类型:
var aqn = typeof(MySettingProvider).AssemblyQualifiedName;
var providerType = Type.GetType(aqn);
这行得通。
但出于某种原因,从系统程序集中调用了 Type.GetType:
System.dll!System.Configuration.ApplicationSettingsBase.CreateSetting(System.Reflection.PropertyInfo propInfo) 第 426 行 C#
返回空值
两种情况下的程序集限定名称相同。
如果我启动程序集 A 不是作为 COM 对象而是作为来自托管进程的常规程序集,则 Type.GetType 在两种情况下都有效:在 A 启动代码和 System.Configuration.ApplicationSettingsBase 中。
如果我再添加一个嵌套级别并尝试在程序集 B 中创建类型,它也可以工作。
一些带有调用堆栈的“图片”:
native.exe
-> COM interop
-> A.dll
-> Type.GetType: OK
-> B.dll
-> Type.GetType: OK
-> System.Configuration.ApplicationSettingsBase
-> Type.GetType: null
managed.exe
-> A.dll
-> Type.GetType: OK
-> B.dll
-> Type.GetType: OK
-> System.Configuration.ApplicationSettingsBase
-> Type.GetType: OK
有什么想法吗?
【问题讨论】:
标签: .net com-interop