2012-01-11 92 views
0

我正在为Visual Studio 2010编写自定义代码分析规则(基本上是FxCop,但是是最新版本)。我想获得一个属性(或所有属性的集合)应用于该组件的检查,使用如下代码:代码分析AssemblyNode.GetType总是返回null

public override ProblemCollection Check(ModuleNode module) 
{ 
    AssemblyNode assembly = module as AssemblyNode; 
    if (assembly != null) 
    { 
     Identifier ns = Identifier.For("System.Reflection"); 
     Identifier attr = Identifier.For("AssemblyCopyrightAttribute"); 
     TypeNode type = assembly.GetType(ns, attr);   
     ... 

...但“型”总是空,即使事实上,我知道这个属性是为程序集定义的。

此外...当我调试这个,我看到assembly.ModuleAttributes集合为空,因为是ExportedTypes,如模块...它看起来仿佛集包含什么都没有!但是,'base'ModuleNode已完全填充,例如在其属性集合中包含14个属性。

就好像“Assembly作为AssemblyNode”是错误的,但如果是这样它将返回null!任何人都可以解释我做错了什么?

回答

0

ModuleNodel.GetType寻找的类型定义,而不是类型的使用。 AssemblyCopyrightAttribute在mscorlib程序集中定义,这可能不是您的规则的目标。要找到AssemblyCopyrightAttribute的用法,请尝试使用assembly.GetAttribute。有关示例,请参见FxCop: custom rule for checking assembly info values