次の方法で共有


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

プロパティ
ルール ID CA2243
Title 属性文字列リテラルは、正しく解析する必要があります
[カテゴリ] 使用方法
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 いいえ

原因

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

規則の説明

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

パラメーターが文字列として型指定されているため、正しく書式設定されていないパラメーターがコンパイル時に渡される可能性があります。

この規則では、名前付けのヒューリスティックを使用して、Uniform Resource Identifier (URI)、グローバル一意識別子 (GUID)、またはバージョンを表すパラメーターを検索し、渡された値が正しいことを確認します。

違反の修正方法

パラメーター文字列を正しく書式設定された URL、GUID、またはバージョンに変更します。

どのようなときに警告を抑制するか

パラメーターが URL、GUID、またはバージョンを表していない場合は、この規則による警告を抑制できます。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA2243
// The code that's violating the rule is on this line.
#pragma warning restore CA2243

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA2243.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

次の例は、この規則に違反する AssemblyFileVersionAttribute のコードを示しています。

[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.String に解析できないパラメーター。

  • 'guid' を含んでいて、System.Guid に解析できないパラメーター。

  • 'url'、'urn'、または 'url' を含んでいて、System.Uri に解析できないパラメーター。

関連項目