如何获得.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