通过


CA2243: 特性字符串文本应正确解析

属性
规则 ID CA2243
标题 特性字符串字面值应正确解析
类别 使用情况
修复会引起中断还是不会引起中断 非中断
在 .NET 10 中默认启用
适用的语言 C# 和 Visual Basic

原因

特性的字符串文本参数不能正确解析为 URL、GUID 或版本。

规则说明

由于特性从 System.Attribute 派生而来,并在编译时使用,因此只能将常数值传递给其构造函数。 必须表示 URL、GUID 和版本的特性参数不能类型化为 System.UriSystem.GuidSystem.Version,因为这些类型不能表示为常量。 相反,它们必须表示为字符串。

由于参数已类型化为字符串,因此可能会在编译时传递格式错误的参数。

此规则使用命名启发式方法查找表示统一资源标识符 (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.Version 的参数。

  • 包含“guid”且无法解析为 System.Guid 的参数。

  • 包含“uri”、“urn”或“url”且无法解析为 System.Uri 的参数。

另请参阅