2012-01-11 20 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);   
     ... 

...しかし「タイプは、」場合でも、常にnullであります私はそのような属性がアセンブリのために定義されていることを知っています。

さらに...これをデバッグすると、Assembly.ModuleAttributesコレクションが空で、ExportedTypesもモジュールと同じように見えますが、アセンブリには何も含まれていないように見えます!しかし、 'base' ModuleNodeは完全に埋め込まれており、たとえばその属性コレクションに14の属性が含まれています。

「AssemblyNodeとしてのモジュール」は間違っていますが、そうであればnullを返します。誰かが私が間違っていることを説明することはできますか?

答えて

0

ModuleNodel.GetTypeはタイプの定義、ないタイプの使用を探します。 AssemblyCopyrightAttributeはmscorlibアセンブリで定義されていますが、これはおそらくルールが対象としていないものです。 AssemblyCopyrightAttributeを使用するには、assembly.GetAttributeを代わりに使用してください。たとえば、FxCop: custom rule for checking assembly info valuesを参照してください。

関連する問題