次の方法で共有


CA2243: 属性文字列リテラルは、正しく解析する必要があります

TypeName

AttributeStringLiteralsShouldParseCorrectly

CheckId

CA2243

[カテゴリ]

Microsoft.Usage

互換性に影響する変更点

なし

原因

属性文字列のリテラル パラメーターが URL、GUID、またはバージョンとして正しく解析されません。

規則の説明

属性は System.Attribute から派生し、コンパイル時に使用されるため、コンストラクターには定数値だけを渡すことができます。URL、GUID、およびバージョンを表す属性パラメーターは、System.UriSystem.Guid、および System.Version として型指定することはできません。これらの型を定数として表すことはできないからです。このような属性パラメーターは文字列で表す必要があります。

パラメーターを文字列として型指定することにより、コンパイル時に誤った形式のパラメーターが渡されることがあります。

この規則では、名前付けヒューリスティックを使用して、URI (Uniform Resource Identifier)、グローバル一意識別子 (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 パラメーターを文字列にすることはできません