与.NET 3.5相比,为什么我在.NET4中获得不同的结果

时间:2011-02-18 14:37:59

标签: c# .net-3.5 .net-4.0

当我将项目的目标框架设置为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反射器中时,找不到类型。所以我猜它并不存在。

1 个答案:

答案 0 :(得分:1)

某些框架类型在版本之间移动了程序集,并使用程序集绑定重定向使其通常对客户端不可见。那个可以解释发生了什么,但是如果不知道你想要找到哪种装配和类型,很难说。

编辑:好的,现在我们已经有了更多的背景......

这表明该类型确实不在该模块中...... .NET 3.5中可能存在一个错误,该错误在父程序集中查找类型名称而不是模块内部。

你有没有理由 逐个模块地查看,而不是只询问程序集本身的类型?