考慮以下代碼,其被包含在單個文件中:如何禁止StyleCop警告SA1403?
namespace Foo
{
public partial class One
{
}
}
namespace Baa
{
public partial class Two
{
}
}
編譯此代碼產生兩個StyleCop的警告:
- SA1402:FileMayOnlyContainASingleClass
- SA1403:FileMayOnlyContainASingleNamespace
抑制SA1402按預期工作:
namespace Foo
{
[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass")]
public partial class One
{
}
}
namespace Baa
{
[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass")]
public partial class Two
{
}
}
不幸的是,我似乎無法抑制SA1403。
我嘗試了以下抑制上述每個類(按照SA1402抑制):
[SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace")]
我也試着下面裝配水平抑制,無論是在文件的頂部和在我的全局抑制文件(我意識到這不是一個明智的主意):
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace")]
但無濟於事。
所以,我的問題是:如何壓制StyleCop警告SA1403?
感謝,
Ë
附:請抑制的衝動,提醒我,在一個文件中多個命名空間演示了不好的編程習慣......
EDIT(20121127): 與Mightymuke的答案,我已經研究過使用SourceFileList
的可能性線。
我們在我們的版本中使用StyleCopOverrideSettingsFile
標籤,該標籤指向共享規則文件。在與Mightymuke的建議路線,添加以下到我們的文件:
<SourceFileList>
<SourceFile>MyFileName.cs</SourceFile>
<Settings>
<Analyzers>
<Analyzer AnalyzerId="Microsoft.StyleCop.CSharp.MaintainabilityRules">
<Rules>
<Rule Name="FileMayOnlyContainASingleNamespace">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
</Analyzer>
</Analyzers>
</Settings>
</SourceFileList>
這也不能工作。
但我相信,這可能是設計。我找到了一個StyleCop bug report,暗示SourceFileList
標籤不能在比項目級更高的級別上使用。
考慮到這些信息,我試圖在項目級添加一個Settings.StyleCop
文件。
還是沒有喜樂。
我現在正在研究StyleCopOverrideSettingsFile
標記正在消除所有其他設置文件的可能性。這似乎是合乎邏輯的,但如果是這樣的話,我所看到的行爲意味着在一個也使用StyleCopOverrideSettingsFile
的版本中使用SourceFileList
是不可能的。 另外,它可能只是Settings.StyleCop
是錯誤的文件名,或者我把它放在錯誤的位置(我把它放在csproj文件旁邊。
編輯(20130425):
最終我放棄了。有問題的代碼是由Visual Studio模板文件(.TT)自動生成的,所以我花了額外的努力使模板代碼將命名空間拆分爲單獨的文件。
在單個文件中使用多個名稱空間演示ba ......哦,你已經說過:P。儘管如此,StyleCop可以幫助你避免不良行爲,但是你想忽略它並且不管怎麼做?你會反對它的使用:)。 – mattytommo