我正在尝试使用ASP.net网站中的反射来创建类的实例。类ClassName已定义并位于App_code文件夹中。以下行返回null,可能是错误的。
Type type = Type.GetType("NameSpace.ClassName", false, true);
答案 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");