Type.GetType(“ System.Net.WebException”)返回null

时间:2019-11-23 08:57:23

标签: c# reflection

我正在尝试通过以下操作从名称中获取对System.Net.WebException的类型引用:

var t = Type.GetType("System.Net.WebException");

tnull,我不明白为什么。我的项目是面向.NET 4.6.1的类库。我正在引用System,也尝试引用System.NetSystem.Web,但没有任何运气。

以下将编译并返回正确的类型:

var t = typeof(System.Net.WebException);

但是我需要string版本才能在这里工作。我也尝试过:

var t = Type.GetType("System.Net.WebException, System");

也返回null

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

根据Type.GetType的{​​{3}},如果类型位于mscorlib.dll中,则只能传递名称空间限定的类型名称,否则必须使用程序集限定的名称。 UTF-8 solution不在mscorlib.dll中,因此您至少需要:

Type.GetType("System.Net.WebException, System, Version=4.0.0.0")

通过检查typeof(WebException).AssemblyQualifiedName,您可以看到类似:

System.Net.WebException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

答案 1 :(得分:2)

您应该使用此:

var t = Type.GetType("System.Net.WebException" + ", System");

您是否尝试过以下方法:

 var t = Type.GetType("System.Net.WebException", true);

您将收到以下错误消息:

  

未处理的异常。 System.TypeLoadException:无法加载类型   来自程序集'ConsoleApp1,Version = 1.0.0.0,的'System.Net.WebException',   文化=中性,PublicKeyToken =空”。在   System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔   ......

我们传递的第二个参数true表示,如果找不到该类型,我们希望此方法调用引发错误。因此,通过传递它,您将注意到Type.GetType需要全限定名称。 docs更正式:

public static Type GetType (string typeName);

参数

typeName String

要获取的程序集限定名称。请参阅AssemblyQualifiedName。 如果类型在当前正在执行的程序集中或在Mscorlib.dll中,则只需提供其名称空间限定的类型名称即可。