CA2243: 属性文字列リテラルは、正しく解析する必要があります
TypeName |
AttributeStringLiteralsShouldParseCorrectly |
CheckId |
CA2243 |
[カテゴリ] |
Microsoft.Usage |
互換性に影響する変更点 |
なし |
原因
属性文字列のリテラル パラメーターが URL、GUID、またはバージョンとして正しく解析されません。
規則の説明
属性は System.Attribute から派生し、コンパイル時に使用されるため、コンストラクターには定数値だけを渡すことができます。URL、GUID、およびバージョンを表す属性パラメーターは、System.Uri、System.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 と解析できないパラメーター