簡體   English   中英

生成后.Net程序集檢查(屬性和調用圖)

[英]Post build .Net assembly checking (attributes and call graph)

程序集中的所有方法都標記有以下兩個屬性之一:[Bottleneck]或[Caching]。 [Caching]方法會做一些緩存,由於很少調用,因此應以最清晰的方式實現。 相反,每次服務器使用程序集時(經常)就會調用[Bottleneck]方法,因此應該對其進行優化。

有沒有一種檢查方法:1.每個方法都標記有一個屬性。 2.沒有[Bottleneck]方法調用[Caching]方法。

我想將此工具與VS 2010集成在一起。

問候,

您始終可以使用反射, Mono.Cecil編寫自己的自定義工具,或者編寫自己的FxCop / CodeAnalysis 自定義規則

您還可以使用NDepend ,它使您基本上可以在程序集上編寫“類似於SQL的”查詢。 使用此CQL(代碼查詢語言),您可以檢查約束。 NDepend集成到Visual Studio中,並且還具有用於自動構建的命令行版本。

特別是對於您的第二個要求(調用圖),我不確定NDepend是否可以做到。 您自己的工具當然可以,就像使用自定義FxCop規則所做的那樣。

編輯 :看一下NDepend的CQL規范 ,我傾向於說第二個要求確實不是(輕松)可行的。

要詳細說明克里斯蒂安的答案,是的,由於有了“ 代碼查詢”和“ LINQ規則”功能 ,新的NDepend版本可以滿足您的要求。 免責聲明:我是該工具的開發人員之一

每個方法都標記有屬性之一

只需編寫CQLinq代碼規則:

warnif count > 0
from m in Application.Methods where 
 !m.IsConstructor && !m.IsPropertyGetter && !m.IsPropertySetter &&
 !m.HasAttribute("MyNamespace.Caching") &&
 !m.HasAttribute("MyNamespace.Bottleneck")
select m

沒有[Bottleneck]方法調用[Caching]方法。

只需編寫稍微復雜一點的代碼規則:

warnif count > 0 

let bottleneckMethods = 
   from m in Application.Methods where 
     !m.IsConstructor && !m.IsPropertyGetter && !m.IsPropertySetter &&
     !m.HasAttribute("MyNamespace.Bottleneck")
    select m

let cachingMethods = 
   (from m in Application.Methods where 
      !m.IsConstructor && !m.IsPropertyGetter && !m.IsPropertySetter &&
      !m.HasAttribute("MyNamespace.Caching")
    select m).ToHashSet() // <-  ToHashSet() Just for optimization with Intersect()

from m in bottleneckMethods
let cachingMethodsCalled = m.MethodsCalled.Intersect(cachingMethods)
where cachingMethodsCalled.Count() > 0
select new { m, cachingMethodsCalled }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM