![](/img/trans.png)
[英]Any ideas on how to write a static analysis rule (FXCop) to ensure that event delegates are removed
[英]How to write Code Analysis (FxCop) rule to prevent a method call
如何為vs2008編寫代碼分析工具以防止特定的框架調用,例如GC.WaitForFullGCComplete()或Application.DoEvents()
我嘗試在我的自定義規則中覆蓋VisitMethodCall,但我無法弄清楚Microsoft.FxCop.Sdk.MethodCall參數在其中的真正含義。 無法在網絡上找到示例。
有人能指出我正確的方向嗎?
使用您嘗試查找和阻止的方法簽名替換System.Web.HttpUtility.HtmlEncode(System.String)
。
public override ProblemCollection Check(Member member)
{
if (member is Method)
{
var callees = new List<Method>(Callees.CalleesFor((Method)member));
foreach (var callee in callees)
{
if (callee.FullName == "System.Web.HttpUtility.HtmlEncode(System.String)")
{
Problems.Add(new Problem(GetResolution()));
}
}
}
return Problems;
}
我記得一本調試書 ,我認為它有一章關於FXCop規則,並討論了如何編寫一本。 對於我的生活,我找不到我的副本。 我懷疑你需要反射器
編寫FxCop規則的一個替代方法是使用NDepend工具。 這個工具允許通過C#LINQ查詢編寫代碼規則 我們稱之為CQLinq 。 免責聲明:我是該工具的開發人員之一
默認情況下,提出了200多個代碼規則 。 由於眾所周知的 C#LINQ語法,自定義現有規則或創建自己的規則非常簡單。
如何為vs2008編寫代碼分析工具以防止特定的框架調用,例如GC.WaitForFullGCComplete()或Application.DoEvents()
對於這個特殊需求,簡單的以下CQLinq規則就足夠了(注意使用AllowNoMatch()使這個規則適用於任何情況):
// <Name>Don't call these methods</Name>
warnif count > 0
from m in Methods
where m.IsUsing ("System.GC.WaitForFullGCComplete()".AllowNoMatch()) ||
m.IsUsing ("System.GC.WaitForFullGCComplete(Int32)".AllowNoMatch()) ||
m.IsUsing ("System.Windows.Forms.Application.DoEvents()".AllowNoMatch())
select m
CQLinq查詢可以在VisualStudio中實時編輯,並提供即時結果,具有結果瀏覽功能:
讓我們確切地說,可以在生成的HTML + javascript報告中 在Visual Studio和Build Process時間實時驗證規則。
雖然它與NDepend,甚至FxCop本身都不匹配,但我在這里發布了一個非常輕量級的方法,它適用於簡單的事情,例如阻止對特定方法的調用: http : //activesharp.codeplex.com/wikipage?title =使用%20ActiveSharp%20AS%20A%20Unit%20Test%20Tool
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.