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

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

有帮助吗?

解决方案

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";
}

此也假定您的类型是在根声明。你将需要提供在名称的命名空间或封闭的类型,或者以相同的方式进行迭代。

其他提示

Assembly.GetAssembly(typeof(System.Int32))

替换你碰巧任何类型的需要System.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解决接受的答案。

Type.GetType(typeNameString).Assembly

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

typeof(int).Assembly
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top