首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在.Net中获取给定类型的程序集(System.Reflection.Assembly)?

如何在.Net中获取给定类型的程序集(System.Reflection.Assembly)?
EN

Stack Overflow用户
提问于 2009-07-17 01:48:32
回答 5查看 62.2K关注 0票数 40

在.Net中,给定一个类型名称,是否有一个方法可以告诉我该类型是在哪个程序集(System.Reflection.Assembly的实例)中定义的?

我假设我的项目已经有一个对该程序集的引用,只需要知道它是哪一个。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-17 02:18:33

Assembly.GetAssembly假设您具有该类型的实例,而Type.GetType假设您具有包含程序集名称的完全限定类型名称。

如果你只有基本类型名,你需要做更多类似这样的事情:

代码语言:javascript
运行
复制
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";
}

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

票数 40
EN

Stack Overflow用户

发布于 2009-07-17 01:55:02

代码语言:javascript
运行
复制
Assembly.GetAssembly(typeof(System.Int32))

System.Int32替换为您需要的任何类型。因为它接受Type参数,所以您几乎可以通过这种方式执行任何操作,例如:

代码语言:javascript
运行
复制
string GetAssemblyLocationOfObject(object o) {
    return Assembly.GetAssembly(o.GetType()).Location;
}
票数 35
EN

Stack Overflow用户

发布于 2013-09-06 02:59:31

我已经根据自己的目的调整了接受的答案(返回程序集对象而不是程序集名称),并重构了VB.NET和LINQ的代码:

代码语言:javascript
运行
复制
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解决方案的公认的答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1141121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档