如何获得大会(System.Reflection.Assembly)在.net中给定类型?
-
16-09-2019 - |
题
在净,给出一种类型,名称,有没有告诉我,其中组件(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
不隶属于 StackOverflow