2011-02-18 115 views
2

当我有我的项目的目标框架设置为框架4.0和运行下面的代码:为什么我得到.NET4不同的结果相比,.NET 3.5

Assembly pAsm = Assembly.LoadFrom(aMagPath); 
foreach (Module m in pAsm.GetModules()) 
{ 
    Type t = m.GetType("typeName")); 
} 

typeName为从第三用户定义类型党的dll。

t为空。

如果我将目标类型更改为Framework 3.5 t不为null。

我不改变别的。我只是改变目标框架并重新运行应用程序。

任何人都可以解释为什么发生这种情况? 是否有一些工具可以让我更深入地研究这个问题?

更新: 我将我的代码更改为以下内容。

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

什么是“m”,您寻找的是什么类型? – 2011-02-18 14:40:22

+0

什么是m,括号中的含义是什么? – 2011-02-18 14:41:23

回答

1

某些框架类型在版本之间移动了组件,使用程序集绑定重定向来使其通常对客户端不可见。那可能会解释发生了什么,但很难说不知道你试图找到哪个组件和类型。

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

这表明该类型真的是没有在该模块中......这有可能是在有.NET 3.5的一个bug它在父级程序集中查找类型名称而不是在模块中。

是否有任何理由为什么你在逐个模块的基础上寻找,而不是只是要求程序集本身的类型?

相关问题