CA2243:屬性字串常值必須正確剖析
型別名稱 |
AttributeStringLiteralsShouldParseCorrectly |
CheckId |
CA2243 |
分類 |
Microsoft.Usage |
中斷變更 |
不中斷 |
原因
屬性 (Attribute) 的字串常值 (String Literal) 未針對 URL、GUID 或版本進行正確剖析。
規則描述
由於屬性都是衍生自 System.Attribute,而且會在編譯時期使用,因此只能將常數值傳遞到屬性的建構函式 (Constructor)。 必須表示 URL、GUID 和版本的屬性參數不能是 System.Uri、System.Guid 和 System.Version 型別,因為這些型別不能以常數表示。 而必須用字串來表示。
由於參數的型別為字串,因此在編譯時期可能會傳遞格式不正確的參數。
此規則使用命名啟發學習法 (Heuristic) 找出代表統一資源識別項 (URI)、全域唯一識別項 (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 的參數。