[英]Attributes on C#9 top level statements file
我正在嘗試將屬性添加到頂級語句文件,但我沒有找到任何相關信息。 是否可以?
對於某些上下文:我只想在該文件中禁用規則:
[SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1516:ElementsMustBeSeparatedByBlankLine", Justification = "Reviewed.")]
這是一條在頂級語句中存在已知錯誤的規則。
有什么辦法嗎?
我有一個與我想使用的[ExcludeFromCodeCoverage]
屬性類似的問題,並收到了 C# 10 有效的答案。 因此,如果您能夠遷移到 C# 10,則可以使用partial class
執行以下操作:
使用以下代碼創建一個Program.Attributes.cs
(我就是這樣命名的,所以它嵌套在Program.cs
下):
[SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1516:ElementsMustBeSeparatedByBlankLine", Justification = "Reviewed.")]
public static partial class Program { }
在此處查看原始答案: https://stackoverflow.com/a/72013001/1099519
假設您要設置程序集范圍的屬性,那么它與 C# 9.0 之前的相同。 您缺少assembly:
關鍵字。
https://docs.microsoft.com/en-us/dotnet/standard/assembly/set-attributes
更改代碼以添加assembly:
關鍵字,如下所示:
[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1516:ElementsMustBeSeparatedByBlankLine", Justification = "Reviewed.")
如果您想將屬性添加到隱式入口點方法(又名Program.Main
)或其父類型class Program
那么您不能,僅僅因為 C# 9.0 的頂級語句設計不允許程序命名或引用該方法根本。
在頂級方法的文檔中簡要提到了這一點(重點是我的):
隱式入口點方法
編譯器生成一個方法作為具有頂級語句的項目的程序入口點。 此方法的名稱實際上不是 Main,它是您的代碼無法直接引用的實現細節。 方法的簽名取決於頂級語句是否包含
await
關鍵字或return
語句。
...在這種情況下,您需要將代碼改回使用傳統的顯式Main
方法:
[SuppressMessage("SomeClassRule", "", Justification = "It's my computer")]
public static class Program
{
[SuppressMessage("SomeMethodRule", "", Justification = "It's my computer")]
public static async Task<Int32> Main( String[] args )
{
return 0;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.