簡體   English   中英

C#9 頂級語句文件的屬性

[英]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 的頂級語句設計不允許程序命名或引用該方法根本。

在頂級方法的文檔中簡要提到了這一點(重點是我的):

https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/program-structure/top-level-statements#implicit-entry-point-method

隱式入口點方法

編譯器生成一個方法作為具有頂級語句的項目的程序入口點。 此方法的名稱實際上不是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM