我正在尝试通过以下操作从名称中获取对System.Net.WebException
的类型引用:
var t = Type.GetType("System.Net.WebException");
t
是null
,我不明白为什么。我的项目是面向.NET 4.6.1的类库。我正在引用System
,也尝试引用System.Net
和System.Web
,但没有任何运气。
以下将编译并返回正确的类型:
var t = typeof(System.Net.WebException);
但是我需要string
版本才能在这里工作。我也尝试过:
var t = Type.GetType("System.Net.WebException, System");
也返回null
。
有什么想法吗?
答案 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中,则只需提供其名称空间限定的类型名称即可。