【问题标题】:Why do I get different results in .NET4 compared to .NET 3.5与 .NET 3.5 相比,为什么我在 .NET4 中得到不同的结果
【发布时间】:2011-06-29 21:05:51
【问题描述】:

当我将项目的目标框架设置为 Framework 4.0 并运行以下代码时:

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

typeName 是来自第 3 方 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);

我仍然有同样的问题。 t = null 在 4.0 版中,在 3.5 版中没有

当我将它加载到 .net 反射器时,我找不到类型。所以我猜它不是真的存在。

【问题讨论】:

  • 什么是“m”,你要找的类型是什么?
  • 什么是 m,括号是怎么回事?
  • @ jon - 我编辑了这个问题来回答你的问题。

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


【解决方案1】:

一些框架类型已经在版本之间跨程序集移动,通过程序集绑定重定向使其通常对客户端不可见。这可能可以解释发生了什么,但是如果不知道您要查找的程序集和类型很难说。

编辑:好的,现在我们有了更多的上下文......

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

您是否有任何理由必须逐个模块地查看,而不是仅仅询问程序集本身的类型?

【讨论】:

  • 程序集是由第三方工具包自动生成的。
  • @scott:嗯,这表明该类型确实不在该模块中......请参阅我的编辑。
  • 嗯。所以它似乎只存在于 3.5 中?那很有意思。关于为什么会发生这种情况的任何想法?
  • 我没有意识到你可以做到这一点。我会尝试询问程序集本身。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多