在.Net中,给定一个类型名称,是否有一个方法可以告诉我该类型是在哪个程序集(System.Reflection.Assembly的实例)中定义的?
我假设我的项目已经有一个对该程序集的引用,只需要知道它是哪一个。
发布于 2009-07-17 02:18:33
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";
}这也假设您的类型是在根中声明的。您需要在名称中提供命名空间或封闭类型,或者以相同的方式进行迭代。
发布于 2009-07-17 01:55:02
Assembly.GetAssembly(typeof(System.Int32))将System.Int32替换为您需要的任何类型。因为它接受Type参数,所以您几乎可以通过这种方式执行任何操作,例如:
string GetAssemblyLocationOfObject(object o) {
return Assembly.GetAssembly(o.GetType()).Location;
}发布于 2013-09-06 02:59:31
我已经根据自己的目的调整了接受的答案(返回程序集对象而不是程序集名称),并重构了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解决方案的公认的答案。
https://stackoverflow.com/questions/1141121
复制相似问题