2012-01-11 82 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