[英]Cannot get type by full name despite this type exists and is loaded
奇怪的问题,我得到System.TypeLoadException“无法加载类型'颜色'”:
using UnityEngine;
Type.GetType(typeof(Color).FullName, true);
当然,我不能只使用typeof(Color)
,代码证明此类型存在并已加载并且其名称正确。
typeof(Color).FullName
==“ UnityEngine.Color”。
我也尝试过:
typeof(Color).Module.GetTypes().First(t => t.Name == "Color")
工作正常,但是
typeof(Color).Module.GetType("Color", true, false)
抛出TypeLoadException
。 因此,我得出的结论是,这不是“完全合格的名称”问题,而是其他问题。
我还尝试了UnityEngine
程序集和另一个3rd-party程序集的其他类型。
我检查了Mono的源代码,但是相关的代码在C实现中,很难快速理解。
Type.FullName
不包含程序集-因此,除非类型在调用程序集或mscorlib
,否则将找不到该类型。
基本上,如果您尝试从任意程序集中加载类型,则有两个简单的选项:
Type.GetType()
使用程序集限定名称 Assembly.GetType
如果您在编译时知道同一程序集中的另一种类型,则通常最简单的使用方法是:
Type type = typeof(KnownType).Assembly.GetType("Qualified.UnknownType");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.