【问题标题】:Why Type.GetType giving null? [duplicate]为什么 Type.GetType 给出 null? [复制]
【发布时间】:2011-11-17 12:10:27
【问题描述】:

可能重复:
When does Assembly.GetType(name) return null?

在我的项目中,我有一个名为“BaseSystem”的基类,并有一个派生类“RoundedTree”。下面显示的代码'type' 为派生类“RoundedTree”和基类“BaseSystem”为空,它给出为“{Name = "BaseSystem" FullName = "Root.SystemModel.BaseSystem"}'。我拥有的 DLL 是 Root.SystemModel.dll 及其版本我可以在反射中看到如 3.6.7.8 派生类的“类型”变为空的原因是什么

public static Type ToType(UserType usedType)
      {

         Type type = null;
         if (usedTypeType != null
            && usedTypeType.Name != string.Empty)
         {
            type = Type.GetType(usedType.Name); 

【问题讨论】:

  • 您是否放弃了之前使用 Assembly.GetType() 的尝试?我从来没有得到你的代码。 stackoverflow.com/questions/8141190/…
  • 是的,但现在我有一些不同的想法,而不是在根级别修复叶级问题
  • 这里在加载应用程序 TypeBuilder myTypeBuilder 时,我在 CreateType() 方法中得到 Name = "_RoundedTree" FullName = "_RoundedTree,如果我在 'type' 中得到这个值作为 type = Type.GetType(xmlSerializableType .Name); 那么我相信所有的问题都会过去,我假设

标签: c# winforms visual-studio-2005


【解决方案1】:

Type.GetType(string) 将返回 null 如果您只给它命名空间限定的类型名称(而不是程序集限定的名称)并且该类型位于 mscorlib 和当前正在执行的程序集中以外的程序集中。

来自文档:

如果 typeName 包含命名空间但不包含程序集名称,则此方法仅按此顺序搜索调用对象的程序集和 Mscorlib.dll。如果 typeName 是完全限定的部分或完整程序集名称,则此方法在指定的程序集中搜索。如果程序集具有强名称,则需要完整的程序集名称。

假设您的类型与调用的类型位于不同的程序集中,则选项为:

  • 获取对相关Assembly 的引用并致电Assembly.GetType(string)
  • Type.GetType(string) 提供程序集限定类型名称

【讨论】:

  • 你告诉的第二个选项,给 Type.GetType(string) 一个程序集限定的类型名称,这是什么意思。这里发生的是在加载应用程序时它将为用户定义的类和 TypeBuilder 创建程序集myTypeBuilder as {Name = "_RoundedTree" FullName = "_RoundedTree"} 到目前为止我还没有得到 'type = Type.GetType(xmlSerializableType.Name); '
  • @rickymartin:嗯,你还没有展示xmlSerializableType.Name 返回的内容......这样做会有所帮助。程序集是在磁盘上创建的吗? Type.GetType(string) 被记录为仅对磁盘上的程序集可靠地工作。
  • 程序集不存在作为用户定义类的 dll,但它在我们的数据库 xml 文件中生成为 __RoundedTreeMymachine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null xmlSerializableType.Name is _RoundedTree here跨度>
  • @rickymartin:是的,所以"_RoundedTree" 不是一个程序集限定名称。您需要完整的程序集名称、版本等。
  • 在加载应用程序 TypeBuilder myTypeBuilder 时,我在 CreateType() 方法中得到 Name = "_RoundedTree" FullName = "_RoundedTree,如果我在 'type' 中将这个值作为 type = Type.GetType(xmlSerializableType.名称);那么我相信所有问题都会过去,我假设
猜你喜欢
  • 2019-04-17
  • 2012-02-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多