如何在.Net中获取给定类型的程序集(System.Reflection.Assembly)?

Fab*_*nda 35 .net c# reflection .net-assembly

在.Net中,给定一个类型名称,是否有一个方法告诉我在哪个程序集(System.Reflection.Assembly的实例)中定义了该类型?

我假设我的项目已经有了对该程序集的引用,只需要知道它是哪一个.

小智 37

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";
}
Run Code Online (Sandbox Code Playgroud)

这也假定您的类型在根中声明.您需要在名称中提供命名空间或封闭类型,或以相同的方式迭代.


Mat*_*ley 33

Assembly.GetAssembly(typeof(System.Int32))
Run Code Online (Sandbox Code Playgroud)

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

string GetAssemblyLocationOfObject(object o) {
    return Assembly.GetAssembly(o.GetType()).Location;
}
Run Code Online (Sandbox Code Playgroud)