2012-03-26 8 views
9

私のロガーをメソッドで呼び出すときはいつでも、特定のクラスのすべてのコード解析メッセージを抑制することはできますか?

CA1303 : Microsoft.Globalization: 
Method 'Database.Connect()' passes a literal 
string as parameter 'message' of a call to 'ILogger.Debug(string)'. 
Retrieve the following string(s) from a resource table instead: 
"Connecting to database...". 

私は​​の機能を使用するたびにこの警告を抑止する方法はあります:

_logger.Debug("Connecting to database..."); 

は、私は警告を取得しますか? 私はそれを使用しているすべての方法で実際には抑制したくありません。

+0

それとも、あなたが代わりにリソーステーブルから文字列を取得でき、その後、あなたはもうすべての警告を持っていないのだろうか? – Msonic

+0

私は知っていますが、私はログメッセージのためにそれをしたくありません。 – xsl

+0

リテラルとしてマークする文字列に@を付ける.Debug(@ "データベースに接続中...") –

答えて

3

FxCop/VSコード分析もCA1303ルールも、このように特定のターゲットを無視するように構成することはできません。

  1. を個別に、
  2. は、ルールを無効に違反を抑止し、または
  3. 代替あなたが好むように動作するカスタムルール:あなたは基本的に3つのオプションがあります。

私はこの種のもののために#3に傾く傾向がありますが、あなたはCA1303の動作を制御することができるようにするべきだと強く感じた場合にメーリングリストへ...また、これはhttps://connect.microsoft.com/VisualStudioで要求して検討するものですまたはhttp://visualstudio.uservoice.com/forums/121579-visual-studio

1

GeneratedCode属性をクラスに適用すると、Code Analysisはクラスを解析しません。

3

私はこの問題に遭遇しました。最も簡単な解決策は、私のロギングメソッドのパラメータを "メッセージ"から別のものに変更することでした。

CA1303は、関連するパラメータまたはプロパティ名に「テキスト」、「メッセージ」または「キャプション」が含まれている場合にのみトリガされます。パラメータがConsole.WriteまたはConsole.WriteLineに渡される場合、パラメータの名前も "value"または "format"にすることはできません。

+0

ありがとう。適切なソリューションは '[Localizable(false)] 'を使うことだと思うが、残念ながらポータブルクラスライブラリではSystem.ComponentModel.LocalizableAttributeは利用できません。ですから、私は 'message'から' logMsg'にパラメータ名を変更して解決しました(ログインタフェースではCA1704:IdentifiersShouldBeSpelledCorrectlyを抑制するだけでした)。 – hlovdal

13

​​インターフェイスを制御する場合は、Localizable属性を値falseに設定して、値がローカライズ可能でないことを示すことができます。例えば

void Info([Localizable(false)] string message); 
+1

正確に必要なもの。回答としてマークされている必要があります。 –

関連する問題