我正在为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!谁能解释我做错了什么?
答案 0 :(得分:0)
ModuleNodel.GetType
查找该类型的定义,而不是该类型的 use 。 AssemblyCopyrightAttribute是在mscorlib程序集中定义的,这可能不是您的规则所针对的。要查找AssemblyCopyrightAttribute的用法,请尝试使用assembly.GetAttribute
。有关示例,请参阅FxCop: custom rule for checking assembly info values。