共用方式為


CA2243:屬性字串常值必須正確剖析

型別名稱

AttributeStringLiteralsShouldParseCorrectly

CheckId

CA2243

分類

Microsoft.Usage

中斷變更

不中斷

原因

屬性 (Attribute) 的字串常值 (String Literal) 未針對 URL、GUID 或版本進行正確剖析。

規則描述

由於屬性都是衍生自 System.Attribute,而且會在編譯時期使用,因此只能將常數值傳遞到屬性的建構函式 (Constructor)。 必須表示 URL、GUID 和版本的屬性參數不能是 System.UriSystem.GuidSystem.Version 型別,因為這些型別不能以常數表示。 而必須用字串來表示。

由於參數的型別為字串,因此在編譯時期可能會傳遞格式不正確的參數。

此規則使用命名啟發學習法 (Heuristic) 找出代表統一資源識別項 (URI)、全域唯一識別項 (GUID) 或版本的參數,並驗證傳遞值是否正確。

如何修正違規

將參數字串改成正確格式的 URL、GUID 或版本。

隱藏警告的時機

如果參數不代表 URL、GUID 或版本,則您可以放心地隱藏這項規則的警告。

範例

下列範例顯示違反此規則之 AssemblyFileVersionAttribute 的程式碼。

using System;
using System.Runtime.InteropServices;

namespace Samples
{
    [AttributeUsage(AttributeTargets.Assembly, Inherited = false)]
    [ComVisible(true)]
    public sealed class AssemblyFileVersionAttribute : Attribute
    {
        public AssemblyFileVersionAttribute(string version) { }

        public string Version { get; set; }
    }

    // Since the parameter is typed as a string, it is possible
    // to pass an invalid version number at compile time. The rule
    // would be violated by the following code: [assembly : AssemblyFileVersion("xxxxx")]
}

此規則由下列項目觸發:

  • 包含 ‘version’ 而且無法剖析為 System.Version 的參數。

  • 包含 ‘guid’ 而且無法剖析為 System.Guid 的參數。

  • 包含 ‘uri’、'urn' 或 ‘url’ 而且無法剖析為 System.Uri 的參數。

請參閱

參考

CA1054:URI 參數不應該為字串