1

我非常確定我要問的是不可能的,但我希望Code Analysis的專家能夠建議一種解決方法。基於功能的過濾規則

我想找到一種方法來排除基於功能的GlobalSuppressions.cs中的代碼分析警告。例如,我想在**** ****所有我的日誌報表(我用CommonLogging門面)的禁用

"Microsoft.Globalization", "CA1305:SpecifyIFormatProvider" 

,所以簽名會是這樣的:

Common.Logging.ILog.Trace(System.Action<Common.Logging.FormatMessageHandler>) 

我想處處做到這一點整個項目無論類型,命名空間,或方法名的....

看着otheranswers,這似乎現在是不可能的......是這樣嗎?

回答

0

這確實不可能。當您調用同時具有接受string的過載和接受string, IFormatProvider的過載的方法時,將觸發此規則。它可能應該,因爲我希望你要麼文化敏感或文化不敏感的日誌文件。在這種情況下,代碼分析迫使您做出該選擇。

你可以做什麼,是寫自己的規則,並禁用這一個。或者你可以修復違規行爲,並將其排除在外。快速正則表達式搜索+替換可能可以在幾秒鐘內爲您解決這些問題。

或者您可以編寫一個充當您的代碼和Common.Logging代碼之間的代理/外觀的類,並且只接受string變體。然後你可以重構你的代碼來使用你的方法。這樣,您只需修復一個違規行爲,該違規行爲將保留在新創建的外觀中。

+0

嗯......爲了避開CA而編寫一個門面來記錄外觀是一個選項,但不知道這是否是一種矯枉過正的..它太糟糕了,你不能禁用基於正則表達式的規則。 (搜索和替換是合理的,但它會使日誌記錄非常冗長(他們已經與所有延期執行lambdas,即Logger.Debug(msg => msg(「你好{0}」,「世界」)); ....希望CA團隊可以在未來解決這個問題... – zam6ak