Cam*_*tin 8 .net fxcop localization visual-studio-2010 winforms
我的代码获取CA1303预警从Microsoft.Globalization"不要通过文字本地化参数",但我的代码实际上并没有通过文字:
private void MyForm_Load(object sender, EventArgs e)
{
UpdateTitle();
}
private void UpdateTitle()
{
Version version = Assembly.GetExecutingAssembly().GetName().Version;
CultureInfo culture = CultureInfo.CurrentUICulture;
this.Text = String.Format(culture, "{0} v{1}.{2} Alpha r{3}", this.Text, version.Major, version.Minor, version.Build);
}
Run Code Online (Sandbox Code Playgroud)
每次加载时,此代码都会将表单的标题设置为类似的内容:
MyFormNameAsSetInTheDesigner v0.1 Alpha r123
(version.build实际上包含SVN修订版,在每次提交时自动更新,我不使用,revision因为我的版本控制方案只使用3个数字,major.minor.revision)
但这会触发上述警告,因为它认为我是从字符串文字设置标题栏文本.实际上,我已经Localizable = True在设计器中进行了设置,以便从资源表中获取字符串.
我不想静态设置表单的标题,因为(特别是在alpha和beta阶段)我希望它具有动态版本号.
Jon*_*Jon 11
根据CA1303 的文档,引发警告的原因是您将文字字符串作为方法的第二个参数传递String.Format,此外,该特定重载的第二个形式参数也使用注释LocalizableAttribute.
因此,警告您要做的是将字符串"{0} v{1}.{2} Alpha r{3}"作为资源程序集中的本地化资源,并将其作为参考.这可能是一个好主意,因为从技术上讲,格式字符串的结构及其内容的固定部分是可本地化的资源.
如果您只是想让FxCop闭嘴,您可以相应地进行注释 UpdateTitle:
[SuppressMessage("Microsoft.Globalization",
"CA1303:DoNotPassLiteralsAsLocalizedParameters" )]
private void UpdateTitle() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5089 次 |
| 最近记录: |