我的应用程序中有一段代码(它引用 System.Windows.Forms),它试图解析类的类型信息,Form
如下所示:
Type tForm = Type.GetType("System.Windows.Forms.Form");
dynamic instance = Activator.CreateInstance(tForm);
但因为为空而Activator.CreateInstance
失败。tForm
我该如何解决这个问题?
编辑:类型必须在运行时可解析!
我的应用程序中有一段代码(它引用 System.Windows.Forms),它试图解析类的类型信息,Form
如下所示:
Type tForm = Type.GetType("System.Windows.Forms.Form");
dynamic instance = Activator.CreateInstance(tForm);
但因为为空而Activator.CreateInstance
失败。tForm
我该如何解决这个问题?
编辑:类型必须在运行时可解析!
您需要使用类型的程序集限定名称
Type tForm = Type.GetType("System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Type.GetType(string)
检查一些不同的事情:如果传递的字符串包含程序集信息,那么它将在那里查找。否则,将检查调用程序集和一些其他系统程序集(可能是 System 和 mscorlib)。它不会检查每个组件。
所以,你有几个选择:
"Namespace.TypeName, AssemblyName"
assembly.GetType(string)
,assembly
正确的程序集在哪里AppDomain
,依次检查每个程序集检查这个 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),则必须包含所有程序集信息 - 版本控制、公钥令牌等。