Type.GetType("ClassName")返回null 已排查基础项仍未解决求助
Type.GetType返回null的排查与解决
以下是几种常见原因和对应的解决方法:
1. 程序集加载与名称格式问题
- 先纠正代码笔误:
Assemly应为Assembly,该拼写错误会导致编译失败,需确认实际运行代码无此问题。 - Assembly.Load参数问题:
Assembly.Load("MyAssemblyName")仅当程序集在当前应用域默认加载路径(如输出目录)时才能成功加载。若程序集不在该路径,需使用Assembly.LoadFrom传入完整程序集路径,或确保MyAssemblyName是程序集的完整全名(包含版本、文化、公钥标记,例如MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)。 - GetType参数格式错误:指定程序集时必须使用
"完整类型名, 程序集完整全名"的格式,手动拼接的assembly.FullName需确保准确,建议通过typeof(ClassName).Assembly.FullName获取权威值。
2. 类型查找范围限制
- 仅传入类型名(如
ClassName)时,Type.GetType只会在当前执行程序集和mscorlib/System.Private.CoreLib中查找,若目标类型不在这两个程序集内,必然返回null。 - 仅传入命名空间+类型名(如
namespace.ClassName)时,CLR只会在已加载的程序集中查找,若程序集未被加载(或加载失败),同样无法找到类型。
3. 更可靠的替代写法
直接从包含目标类型的程序集中获取,避免依赖Type.GetType的自动查找:
// 方式1:通过typeof获取程序集,再查找类型 Assembly targetAssembly = typeof(ClassName).Assembly; Type type = targetAssembly.GetType("namespace.ClassName"); // 方式2:使用完整的类型+程序集名称(确保名称准确) string fullTypeName = typeof(ClassName).FullName; string assemblyFullName = typeof(ClassName).Assembly.FullName; Type type = Type.GetType($"{fullTypeName}, {assemblyFullName}");
内容的提问来源于stack exchange,提问作者Edlaos
相关产品推荐
相关产品推荐

