当我将项目的目标框架设置为Framework 4.0并运行以下代码时:
Assembly pAsm = Assembly.LoadFrom(aMagPath);
foreach (Module m in pAsm.GetModules())
{
Type t = m.GetType("typeName"));
}
typeName是来自第三方dll的用户定义类型。
t为空。
如果我将目标类型更改为Framework 3.5,则t不为空。
我不会改变任何其他内容。我只是更改目标框架并重新运行应用程序。
任何人都可以解释为什么会这样吗? 是否有一些工具可以让我更多地研究这个?
更新: 我将代码更改为以下内容。
Assembly pAsm = Assembly.LoadFrom(aMagPath);
Type t = pAsm.GetType(String.Format("GM.FCAT.{0}.{0}+FBlock+{1}Function+{2}CaseStream+{2}RepeatableParameterStream", FBlockName, pName, aParam.Name), false);
我仍有同样的问题。 版本4.0中t = null,版本3.5中不是
当我将它加载到.net反射器中时,找不到类型。所以我猜它并不存在。
答案 0 :(得分:1)
某些框架类型在版本之间移动了程序集,并使用程序集绑定重定向使其通常对客户端不可见。那个可以解释发生了什么,但是如果不知道你想要找到哪种装配和类型,很难说。
编辑:好的,现在我们已经有了更多的背景......
这表明该类型确实不在该模块中...... .NET 3.5中可能存在一个错误,该错误在父程序集中查找类型名称而不是模块内部。
你有没有理由 逐个模块地查看,而不是只询问程序集本身的类型?