請告訴我如何爲以下「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。
請告訴我如何爲以下「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。
從閱讀string.Format()
MSDN文檔,不應該在運行時引發FormatException錯誤嗎?
我的理解是,FxCop的設計不是針對運行時錯誤的有效代碼,而是針對潛在的安全/性能/命名等問題分析程序集並報告這些問題。運行時錯誤超出了它的能力。
是否有某些特定的原因需要針對此自定義規則?與FxCop一起提供的ProvideCorrectArgumentsToFormattingMethods規則已經驗證了String.Format參數。
嗨尼科爾,我使用FxCOP 10,我沒有找到這個規則。所以我無法在運行時找到格式異常。 Ranjeet。 – Ranjeet
@Nicole Calinoiu - 您鏈接的規則是Visual Studio 2010代碼分析的一部分。代碼分析僅適用於Premium和Ultimate版本。正如Ranjeet所說,這個規則不是FxCop 10的一部分。 –
在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,沒有任何問題。
通過靜態分析可以發現很多會導致運行時異常的情況。不正確的格式參數肯定屬於這個類別。 –
@Nicole我的錯誤,謝謝你的糾正。 –