代码分析AssemblyNode.GetType始终返回null

时间:2012-01-11 11:54:36

标签: visual-studio-2010 code-analysis

我正在为Visual Studio 2010编写自定义代码分析规则(基本上是FxCop但是最新版本)。我正在尝试使用以下代码获取应用于正在检查的程序集的属性(或所有属性的集合):

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一样,模块也是如此......看起来好像程序集什么都没包含!然而,'基地' ModuleNode已完全填充,例如,其属性集合中包含14个属性。

好像"模块是AssemblyNode"是错的,但如果是这样,它将返回null!谁能解释我做错了什么?

1 个答案:

答案 0 :(得分:0)

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