我的应用程序中有一段代码(引用System.Windows.Forms ),它尝试解析Form
类的类型信息,如下所示:
Type tForm = Type.GetType("System.Windows.Forms.Form");
dynamic instance = Activator.CreateInstance(tForm);
但Activator.CreateInstance
失败,因为tForm
为空。
我该如何解决这个问题?
编辑:类型必须在运行时解析!
答案 0 :(得分:5)
您需要使用类型
的程序集限定名称Type tForm = Type.GetType("System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
答案 1 :(得分:2)
检查此Jon Skeet答案:https://stackoverflow.com/a/3758295/314488
using System;
using System.Windows.Forms;
class Test
{
static void Main()
{
string name = typeof(Form).AssemblyQualifiedName;
Console.WriteLine(name);
Type type = Type.GetType(name);
Console.WriteLine(type);
}
}
Output:
System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
System.Windows.Forms.Form
请注意,如果您使用强名称程序集(在本例中为Form),则必须包含所有程序集信息 - 版本控制,公钥令牌等。
答案 2 :(得分:2)
Type.GetType(string)
检查一些不同的东西:如果传递的字符串包含汇编信息,那么它将在那里查看。否则,将检查调用程序集和一些其他系统程序集(可能是System和mscorlib)。它不检查每个组件。
所以,你有几个选择:
"Namespace.TypeName, AssemblyName"
assembly.GetType(string)
,其中assembly
是正确的程序集AppDomain
中加载的所有程序集,依次检查每个程序集