Dot-Net

CA1303,DoNotPassLiteralsAsLocalizedParameters,但我其實不是

  • October 16, 2020

**我的程式碼CA1303Microsoft.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);
}

每次載入時,此程式碼都會將表單的標題設置為如下所示:

MyFormNameAsSetInTheDesigner v0.1 Alpha r123

version.build實際上包含 SVN 修訂版,它在每次送出時自動更新,我不使用revision,因為我的版本控制方案僅使用 3 個數字,major.minor.revision

但這會觸發上述警告,因為它認為我正在從字元串文字設置標題欄文本。事實上,我已經Localizable = True在設計器中進行了設置,以便從資源表中獲取字元串。

我不想靜態設置表單的標題,因為(尤其是在 alpha 和 beta 階段)我希望它具有動態版本號。

問題是我該怎麼做才不會收到警告(例如,哪個程式碼將執行我正在執行的操作,但每個 FxCop 都認為它是正確的,或者我如何才能為該行抑制它)。

根據 CA1303 的文件,引發警告的原因是您將文字字元串作為String.Format方法的第二個參數傳遞,此外,該特定重載的第二個形式參數用LocalizableAttribute.

因此,警告要您做的是將字元串"{0} v{1}.{2} Alpha r{3}"作為本地化資源放入您的資源程序集中,並照此引用它。這可能是個好主意,因為從技術上講,格式字元串的結構及其內容的固定部分是可本地化的資源。

如果你只是想讓 FxCop 閉嘴,你可以相應地註釋 UpdateTitle

[SuppressMessage("Microsoft.Globalization",
                "CA1303:DoNotPassLiteralsAsLocalizedParameters" )]
private void UpdateTitle() { /* ... */ }

引用自:https://stackoverflow.com/questions/9804894