Type.GetType(“namespace.a.b.ClassName”) returns null
此代码:
1 | Type.GetType("namespace.a.b.ClassName") |
返回
我在美国有:
1 | using namespace.a.b; |
更新:
类型存在,它在不同的类库中,我需要通过字符串名称来获取它。
如果任何那些东西是真的,你将需要一个合格的名称:组装
1 | Type.GetType("namespace.qualified.TypeName, Assembly.Name") |
所以,你可以得到的不合格,但组装型的DLL的名字,所以名字,例如:
1 | Type myClassType = Type.GetType("TypeName,DllName"); |
我有同样的情况,它为我工作。我需要在"对象类型datamodel.queueobject"和"数据模型"的一个参考。所以我有如下类型:
1 | Type type = Type.GetType("DataModel.QueueObject,DataModel"); |
在第二个字符串是一个逗号后参考名称(DLL的名称)。
尝试使用本法
1 2 3 4 5 6 7 8 9 10 11 12 | public static Type GetType(string typeName) { var type = Type.GetType(typeName); if (type != null) return type; foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) { type = a.GetType(typeName); if (type != null) return type; } return null ; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Dictionary<string, Type> typeCache; ... public static bool TryFindType(string typeName, out Type t) { lock (typeCache) { if (!typeCache.TryGetValue(typeName, out t)) { foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) { t = a.GetType(typeName); if (t != null) break; } typeCache[typeName] = t; // perhaps null } } return t != null; } |
如果是在组装部分建立在ASP.NET应用程序,你可以使用BuildManager类:
1 2 3 | using System.Web.Compilation ... BuildManager.GetType(typeName, false); |
如果你的类是不是在你必须给qualifiedname流组装,这让qualifiedname代码知识类节目
1 |
然后你可以得到一个qualifiedname型
1 | Type elementType = Type.GetType(qualifiedName); |
如果它是一个循环型的,你可能是一个肮脏的玻璃转换。一个+
无论
编辑:另外的应用(AS I’m肯定你知道)是只读指令的编译器在编译时无法有任何的影响,因此对API调用的成功。(如果你有项目或组装的参考,它有潜在的影响,因此信息isnt无用的,它只是需要一些过滤…)
我开的是取决于用户控件用户控件有一个指定的用户访问数据库。所以我用这个方法得到的TypeName…
1 2 | Dim strType As String = GetType(Namespace.ClassName).AssemblyQualifiedName.ToString Dim obj As UserControl = Activator.CreateInstance(Type.GetType(strType)) |
所以现在可以使用在strtype返回的值是创建对象的实例。
当我有一个类名使用只读一本:
1 | Type obj = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes()).Where(t => String.Equals(t.Name, _viewModelName, StringComparison.Ordinal)).First(); |
尝试使用完整的类型名称,包括大会的信息,例如:
1 2 | string typeName = @"MyCompany.MyApp.MyDomain.MyClass, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"; Type myClassType = Type.GetType(typeName); |
我有同样的情况,当我仅用漫游namesspace.classname Get a class类型在不同的组装和它将不会工作。只有当我的工作包括为组装型字符串的信息显示在上面。
如果引用和舱组装可见:
1 |
方法返回的类型是零,因为没有找到,一个typeof,编译器可以帮助你找出的错误。
确保它是一个完全合格后,即直接的名字
1 |
这晚的工作。
1 |
我在这几天stumped for a一
as type.getType(string)需要type.assemblyQualifiedName,您应该使用assembly.createQualifiedName(string,?字符串)。
1 2 3 4 | string typeName ="MyNamespace.MyClass"; // Type.FullName string assemblyName ="MyAssemblyName"; // MyAssembly.FullName or MyAssembly.GetName().Name string assemblyQualifiedName = Assembly.CreateQualifiedName(assemblyName ,?typeName); Type myClassType = Type.GetType(assemblyQualifiedName); |
作为assemblyname,您不需要全名,只需要没有版本、区域性和publickeytoken的名称。
这似乎是最好的解决方案上面给我的,但它不工作对我来说,它是这样的:
1 2 3 4 | AssemblyName assemblyName = AssemblyName.GetAssemblyName(HttpContext.Current.Server.MapPath("~\\Bin\\AnotherAssembly.dll")); string typeAssemblyQualifiedName = string.Join(",","MyNamespace.MyType", assemblyName.FullName); Type myType = Type.GetType(typeAssemblyQualifiedName); |
这是,你知道precondition的组装路径。在我的案例,我知道它,因为这是另一个在建项目和组装在其内部包含在我的项目的文件夹。
那是我的情况用Visual Studio .NET 4.0的2013年,我的目标是。这是一个asp.net的项目,所以我可以通过
对我来说,"+"是关键!这是我的类(它是一个循环酮):
1 2 3 4 5 6 7 8 | namespace PortalServices { public class PortalManagement : WebService { public class Merchant {} } } |
这行代码的工作:
1 | Type type = Type.GetType("PortalServices.PortalManagement+Merchant"); |
我cheated。因为我想创建类型(的名字)都在DLL控制A I,我只是把一个DLL在静态方法中简单的组装任务的名字和电话,这是type.gettype从上下文和返回结果。
什么是原用途的类型可能是由指定的名称在配置数据。我已经改变,因为用户指定的编码格式,这样一个过程。格式处理程序类的实现,如果是A型determines CAN接口解析指定的格式。我使用反射类型,然后找到实现界面,找到一个处理的格式。这样的配置格式的名字现在应该提醒A,A不A型特异性。在相邻的反射代码可以看看他们的DLL和负荷,所以我有一个SORT,穷人的插件架构。