每当我在方法中调用记录器时,例如
_logger.Debug("Connecting to database...");
我收到警告:
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...".
每次使用ILogger
函数时,有没有办法抑制此警告?我真的不想在我使用的每一种方法中都抑制它。
如果控制ILogger
接口,则可以利用值为false的Localizable
属性来指示该值不可本地化。
例如:
void Info([Localizable(false)] string message);
FxCop/VS代码分析和CA1303规则都不能配置为以这种方式忽略特定目标。你基本上有三个选择:
- 单独抑制违规行为
- 禁用规则,或
- 替换一个自定义规则,该规则的行为符合您的意愿
我倾向于在这类事情上倾向于#3,但ymmv。。。此外,如果你强烈认为你应该能够控制CA1303的行为,这是一个值得考虑的要求https://connect.microsoft.com/VisualStudio或http://visualstudio.uservoice.com/forums/121579-visual-studio.
我遇到了这个问题,发现最简单的解决方案是将日志记录方法的参数从"message"重命名为其他参数。
只有当相关参数或属性名称包含"文本"、"消息"或"标题"时,CA1303才会触发。如果将参数传递给Console.Write
或Console.WriteLine
,则该参数也不能命名为"value"或"format"。
如果将GeneratedCode属性应用于类,代码分析将不会分析您的类。