如何找出当前项目的所有引用,并告诉哪些引用来自C#中的特定基类?

时间:2009-05-11 18:11:40

标签: c# reflection activerecord dynamic

由于我工作的非常大的金融机构的政治,我无法使用Castle Project的ActiveRecord实现,但是像我自己实现的模式一样。这是完整的,现在管理层正在寻找一个GUI工具来浏览所有的activerecord类,搜索实例和管理数据。

为此,我正在构建一个“浏览器”,它遍历引用项目中的所有类,如果它们是从一个参数化的基类(“ActiveInstanceBase”)派生的,那么可以将它们用于检查和修改一个ASP.net数据网格。

我的第一步是弄清楚如何遍历当前项目中的所有引用(使用此工具的开发人员将其dll作为引用添加到项目中)并识别ActiveInstance类以填充下拉列表要检查的类型。

  1. 如何获取当前项目的所有参考列表?谷歌在一些查询结果的第一页上没有为我提供任何帮助。我有很多关于编写Visual Studio插件的东西,但没有用于运行时检查。

  2. 如果基类采用Type参数,如何在运行时确定派生类型的基类?

  3. if(t.IsSubclassOf(typeof(ActiveInstance.ActiveInstanceBase)))             {}

    不是正确的语法,我在运行时无法知道。

    我也被迫使用IE6,所以请原谅这篇文章的格式不是很好。非常感谢提前!

2 个答案:

答案 0 :(得分:1)

1)如何获取项目中引用的程序集

Assembly ourAssembly = Assembly.GetEntryAssembly();
AssemblyName[] refs = ourAssembly.GetReferencedAssemblies();

2)使用Type。IsSubclassOf()或Type。GetInterface()

Type theType = typeof(ActiveInstance.ActiveInstanceBase<>);
foreach(Type type in assembly.GetTypes())
{
    if (type.IsSubclassOf(theType))
    { ... }
}

那些应该适合你...

答案 1 :(得分:0)

如果你有下载第三方软件的政治规则,这可能不起作用,但我使用.net Reflector。它将为您提供参考并反编译代码以供审阅。

http://www.red-gate.com/products/reflector/