CA2254:範本應該是靜態運算式

屬性
規則識別碼 CA2254
標題 範本應該是靜態運算式
類別 使用方式
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 建議

原因

傳遞至記錄器 API 的訊息範本不是常數。 當傳遞的範本使用字串串連或插補時,就會發生這種情況。 相反地,範本應該是常數值,以訊息範本格式 表示記錄訊息 。 例如: "User {User} logged in from {Address}" 。 如需詳細資訊,請參閱 記錄訊息範本格式 設定。

檔案描述

執行記錄時,最好保留記錄的結構(包括預留位置名稱),以及預留位置值。 保留這項資訊可讓您在記錄匯總和監視軟體中提供更好的可檢視性和搜尋。

首選:

var firstName = "Lorenz";
var lastName = "Otto";

// This tells the logger that there are FirstName and LastName properties
// on the log message, and correlates them with the argument values.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);

不慣用:

// DO NOT DO THIS

var firstName = "Lorenz";
var lastName = "Otto";

// Here, the log template itself is changing, and the association between named placeholders and their values is lost.
logger.Warning("Person " + firstName + " " + lastName + " encountered an issue");

// String interpolation also loses the association between placeholder names and their values.
logger.Warning($"Person {firstName} {lastName} encountered an issue");

記錄訊息範本在不同呼叫之間不應有異。

如何修正違規

將訊息範本更新為常數運算式。 如果您直接在範本中使用值,請重構範本以改用具名預留位置。

logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);

隱藏錯誤的時機

如果您的使用案例不需要結構化記錄,則隱藏此規則的警告是安全的。 如果您的記錄訊息範本是在資源檔中定義,則隱藏此規則也是安全的。

另請參閱