关于c#:Type.GetType(“namespace.a.b.ClassName”)返回null

Type.GetType(“namespace.a.b.ClassName”) returns null

此代码:

1
Type.GetType("namespace.a.b.ClassName")

返回null

我在美国有:

1
using namespace.a.b;

更新:

类型存在,它在不同的类库中,我需要通过字符串名称来获取它。


Type.GetType("namespace.qualified.TypeName")作品当是只读型的发现在目前执行的是mscorlib.dll或组装。

如果任何那些东西是真的,你将需要一个合格的名称:组装

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
string qualifiedName = typeof(YourClass).AssemblyQualifiedName;

然后你可以得到一个qualifiedname型

1
Type elementType = Type.GetType(qualifiedName);


如果它是一个循环型的,你可能是一个肮脏的玻璃转换。一个+

无论typeof( T).FullName想告诉你,你应该说

编辑:另外的应用(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(namespace.a.b.ClassName)

方法返回的类型是零,因为没有找到,一个typeof,编译器可以帮助你找出的错误。


确保它是一个完全合格后,即直接的名字

1
typeof(namespace.a.b.ClassName, AssemblyName)

这晚的工作。

1
typeof(namespace.a.b.ClassName ,AssemblyName)

我在这几天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的项目,所以我可以通过HttpContext绝对路径。然而,是不是一个绝对路径的需求似乎在assemblyqualifiednames从MSDN


对我来说,"+"是关键!这是我的类(它是一个循环酮):

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,穷人的插件架构。