2011-09-14 109 views
2

請告訴我如何爲以下「String.Format()」方法參數驗證編寫FxCOP自定義規則。需要幫助爲string.Format創建自定義FxCop規則(...)

1.string.Format(「{0} aaaa {1} bbb」,x); // {1}沒有佔位符替換

2.string.Format(「aaaa {1} bbb」,x); // {1}沒有佔位符替換。在字符串內部,它應該是{0}而不是{1}。

Regards,

Ranjeet。

回答

1

從閱讀string.Format() MSDN文檔,不應該在運行時引發FormatException錯誤嗎?

我的理解是,FxCop的設計不是針對運行時錯誤的有效代碼,而是針對潛在的安全/性能/命名等問題分析程序集並報告這些問題。運行時錯誤超出了它的能力。

+1

通過靜態分析可以發現很多會導致運行時異常的情況。不正確的格式參數肯定屬於這個類別。 –

+0

@Nicole我的錯誤,謝謝你的糾正。 –

1

是否有某些特定的原因需要針對此自定義規則?與FxCop一起提供的ProvideCorrectArgumentsToFormattingMethods規則已經驗證了String.Format參數。

+0

嗨尼科爾,我使用FxCOP 10,我沒有找到這個規則。所以我無法在運行時找到格式異常。 Ranjeet。 – Ranjeet

+0

@Nicole Calinoiu - 您鏈接的規則是Visual Studio 2010代碼分析的一部分。代碼分析僅適用於Premium和Ultimate版本。正如Ranjeet所說,這個規則不是FxCop 10的一部分。 –

3

在FxCop 1.35,CA2241中有一個規則來檢查它 - 爲格式化方法提供正確的參數。根據this blog post,由於刪除了[數據流引擎],它已從FxCop 1.36「中刪除。

該規則似乎已恢復爲Visual Studio 2010的代碼分析(請參閱Nicole Calinoiu的答案),但正如我在評論中提到的,Code Analyis僅在Premium和Ultimate版本中可用。因此,如果您想檢查您的程序集是否對String.Format進行了不正確的調用,並且沒有Visual Studio 2010 Premium或Ultimate,則需要使用FxCop 1.35。我在Windows 7中並排運行FxCop 1.35和FxCop 10.0,沒有任何問題。