CA2243:属性文字列リテラルは、正しく解析する必要があります
プロパティ | 値 |
---|---|
ルール ID | CA2243 |
Title | 属性文字列リテラルは、正しく解析する必要があります |
[カテゴリ] | 使用方法 |
修正が中断ありか中断なしか | なし |
.NET 9 では既定で有効 | いいえ |
原因
属性のリテラル文字列パラメーターが URL、GUID、またはバージョンとして正しく解析されません。
規則の説明
属性は System.Attribute から派生しており、属性はコンパイル時に使用されるため、定数値のみをコンストラクターに渡すことができます。 URL、GUID、およびバージョンを表す必要がある属性パラメーターを、System.Uri、System.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 に解析できないパラメーター。
関連項目
.NET