确定包含类名中的类的程序集(不是类型的实例)

时间:2010-06-08 22:13:52

标签: c#

我正在尝试确定哪个程序集包含特定类。我不想在该程序集中创建一个类型的实例,但是想要这样的东西

namespace SomeAssembly
{
   class SomeClass
    {
    }
}

..并在我想要的客户端代码中:

Assembly containingAssembly = GetContainingAssembly(SomeClass)

2 个答案:

答案 0 :(得分:6)

如果您拥有System.Type个实例(例如typeof(SomeType)),则可以查看Assembly属性。

如果您只有一个字符串,则可以遍历AppDomain.CurrentDomain.GetAssemblies()调用assembly.GetType(typeName),直到找到包含该类型的程序集。 (typeName 必须包含完整的命名空间)
请注意,这将非常慢。

如果装配没有装,你可以放弃;不可能。 (除非你自己加载程序集)

答案 1 :(得分:4)

简单:

typeof(SomeClass).Assembly;

如果你想让它成为一个功能:

public static Assembly GetContainingAssembly<T>()
{
    return typeof(T).Assembly;
}

然后像这样执行:

Assembly containingAssembly = GetContainingAssembly<SomeClass>();

对于任何实例对象,它非常简单:

obj something;

something.GetType().Assembly;