如何获得.Net中给定types的程序集(System.Reflection.Assembly)?
在.Net中,给定一个types名称,是否有一个方法告诉我在哪个程序集(System.Reflection.Assembly的实例)中定义了该types?
我假设我的项目已经有了这个程序集的引用,只需要知道它是哪一个。
Assembly.GetAsmbly假定您有一个types的实例,并且Type.GetType假定您具有包含程序集名称的完全限定的types名称。
如果您只有基本types名称,则需要进行如下更多操作:
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"; }
这也假设你的types是在根中声明的。 您需要提供名称空间或封装types的名称,或以相同的方式进行迭代。
Assembly.GetAssembly(typeof(System.Int32))
用任何你需要的typesreplaceSystem.Int32
。 因为它接受一个Type
参数,所以你可以用这种方式做任何事情,例如:
string GetAssemblyLocationOfObject(object o) { return Assembly.GetAssembly(o.GetType()).Location; }
我已经为我自己的目的调整了可接受的答案(返回程序集对象而不是程序集名称),并重构了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解决scheme接受的答案。
Type.GetType(typeNameString).Assembly
如果你可以使用它,这个语法是最短的/最干净的:
typeof(int).Assembly