Type.GetType(“NameSpace.ClassName”,false,true)返回null。可能有什么不对?

时间:2010-04-16 22:19:20

标签: c# asp.net reflection

我正在尝试使用ASP.net网站中的反射来创建类的实例。类ClassName已定义并位于App_code文件夹中。以下行返回null,可能是错误的。

Type type = Type.GetType("NameSpace.ClassName", false, true);

6 个答案:

答案 0 :(得分:8)

仅提供类型名称仅适用于以下情况:

  • 有问题的类型在当前正在执行的程序集中(即与代码相同的程序集)

OR

  • 相关类型位于mscorlib.dll

在所有其他情况下,您必须提供该类型的assembly-qualified name。这使它能够找到合适的组件并加载它。

答案 1 :(得分:4)

您可以使用System.Web.Compilation.BuildManager.GetType,例如

using System.Web.Compilation;

Type t = BuildManager.GetType("NameSpace.ClassName", true);

答案 2 :(得分:2)

Afin,试试吧。这是为了捎带Adam Robinson的答案,并展示你需要做些什么来测试答案中的陈述和自己的评论。

Type t = typeof(YourNamespace.YourClass);
string assemblyQualifiedName = t.AssemblyQualifiedName;
Type type = Type.GetType(assemblyQualifiedName, false, true);
// type will not be null

程序集限定名称类似于“Sample.Foo,App_Code.qwijwhsy,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”。

答案 3 :(得分:0)

尝试使用Assembly.GetType(),它应该在引用的程序集中查找。当然,你需要加载适当的Assembly类,如果类型与你的执行代码共享程序集,那么它将是GetCallingAssembly(),否则就会加载其他东西,在这种情况下你将使用一个静态LoadSomething()方法在大会班内。

例如:

Type type = LoadFrom("App_code\ClassAssembly.dll").GetType("Namespace.ClassName");
// Load assembly, then type!
Type type2 = GetCallingAssembly().GetType("Namespace.ClassName");
// If it's the same assembly as the calling code.

答案 4 :(得分:0)

非常简单的代码。我认为它不需要任何解释。

using System.Reflection;

Assembly assembly = Assembly.LoadFrom("MyLibrary.dll");
Type type = assembly.GetType("NameSpace.ClassName", false, true);

答案 5 :(得分:0)

如果它在App_Code中尝试

Type t = Type.Get("Namespace.ClassName, __code");