如何获得大会(System.Reflection.Assembly)在.net中给定类型?(How

2019-06-26 03:52发布

在.NET中,给出一种类型,名称,有没有类型被定义,告诉我,其中组件的方法(System.Reflection.Assembly的实例)?

我认为我的项目已经到集的引用,只需要知道它是哪一个。

Answer 1:

Assembly.GetAssembly假设你有类型的实例,并Type.GetType假设你有完全限定的类型名称,其中包括程序集名称。

如果只有基本类型名称,你需要做更多的东西是这样的:

public static String GetAssemblyNameContainingType(String typeName) 
{
    foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies()) 
    {
        Type t = currentassembly.GetType(typeName, false, true);
        if (t != null) {return currentassembly.FullName;}
    }

    return "not found";
}

这还假定你的类型在根声明。 您将需要提供姓名命名空间或封闭类型的,或以相同的方式重复。



Answer 2:

Assembly.GetAssembly(typeof(System.Int32))

更换System.Int32与你发生任何类型的需要。 因为它接受一个Type参数,你可以做任何事情这种方式,例如:

string GetAssemblyLocationOfObject(object o) {
    return Assembly.GetAssembly(o.GetType()).Location;
}


Answer 3:

我已经适应接受的答案为我自己的目的(返回装配对象,而不是程序集名称),并为重构VB.NET和LINQ的代码:

Public Function GetAssemblyForType(typeName As String) As Assembly
    Return AppDomain.CurrentDomain.GetAssemblies.FirstOrDefault(Function(a) a.GetType(typeName, False, True) IsNot Nothing)
End Function

我只是分享在这里如果其他人想了LINQy解决接受的答案。



Answer 4:

Type.GetType(typeNameString).Assembly


Answer 5:

如果你可以使用它,这句法是最短/清洁:

typeof(int).Assembly


文章来源: How to get the assembly (System.Reflection.Assembly) for a given type in .Net?