Ответ 1
Вот что вам нужно:
[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
Я использую StyleCop и хочу отключить некоторые предупреждения, которые не соответствуют моему стилю. Я предпочитаю иметь решение для
1) подавление встроенного кода
2) подавление глобальных настроек
Я искал в Интернете, но все еще не уверен, как сделать подавление.
Для метода 1) Они сказали добавить строки:
[assembly: SuppressMessage ("Microsoft.Design", "SA1202: все частные методы должны быть размещены после всех открытых методов", Scope = "namespace", Target = "Consus.Client.ClientVaultModule.Services.OnlineDetection")]
Но они не говорят, где и какое пространство имен будет использоваться.
Что касается метода 2), они сказали, что используют файл GlobalSuppress, но в данный момент, кажется, нелегко найти способ как это сделать.
Пожалуйста помоги.
[Отредактировано] В моем случае у меня есть предупреждение о SA1202: все частные методы должны быть размещены после всех открытых методов, что мешает, так как я группирую свои связанные коды в регионы. Я хочу подавить эти предупреждения только для некоторых определенных методов.
Вот что вам нужно:
[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
Пример встроенного подавления будет схож с этим - рассмотрите пространства имен в коде по сравнению с подавлением
namespace Soapi
{
///<summary>
///</summary>
///<param name = "message"></param>
///<param name = "statusCode"></param>
///<param name = "innerException"></param>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object)")]
public ApiException(string message, ErrorCode statusCode, Exception innerException)
: base(String.Format("{0}\r\nStatusCode:{1}", message, statusCode), innerException)
{
this.statusCode = statusCode;
}
Файл глобальной супрессии - это файл в корневом каталоге вашего проекта с именем GlobalSuppressions.cs
и может выглядеть так:
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
//
// To add a suppression to this file, right-click the message in the
// Error List, point to "Suppress Message(s)", and click
// "In Project Suppression File".
// You do not need to add suppressions to this file manually.
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.String.Format(System.String,System.Object,System.Object,System.Object)", Scope = "member", Target = "Soapi.ApiException.#.ctor(System.String,Soapi.ErrorCode,System.String,System.Exception)")]
И вы можете сгенерировать этот код автоматически, щелкнув правой кнопкой мыши на предупреждении.
Начиная с StyleCop 4.3.2, можно подавить отчет о нарушениях правил, добавив атрибуты подавления в исходный код.
Подавление правил http://stylecop.soyuz5.com/Suppressions.html
но он говорит -
Глобальные подавления
StyleCop не поддерживает понятие глобальных подавлений или подавление уровня файла. Подавления должны быть помещены в код элемент.
Если вы установили StyleCop, вы можете щелкнуть правой кнопкой мыши свой проект, и будет установлен параметр StyleCop. Нажмите эту кнопку, и вы увидите, что некоторые правила могут быть запрещены даже против вашего проекта. Кроме того, вы можете создать отдельный файл правил для совместного использования между различными проектами. Это означает, что вы можете настроить правила как только они захотите, а затем поделиться этой конфигурацией между всеми вашими проектами.
Для индивидуальных переопределений SuppressMessage
- это путь.
Нельзя ли просто удалить правило, а не загрязнять свой код?
То же самое касается FxCop...
Прочтите предупреждение от Style Cop, ища буквенно-цифровой код. В вашем случае "SA1202". Затем перейдите на соответствующую страницу на веб-сайте Style Cop. Измените URL-адрес соответствующим образом http://www.stylecop.com/docs/SA1202.html
Скопируйте строку с надписью "Как подавить нарушения". Вставьте атрибут над классом, по которому стиль Cop стонет
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
1.
В вашем случае правильный атрибут SuppressMessage
должен выглядеть следующим образом:
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
private void SomeMethod()
{
}
Обратите внимание, что вы можете поместить его на любой другой элемент (например, на класс - тогда все подобные нарушения во всем классе будут подавлены).
Я также согласен с тем, что совершенно неочевидно, что писать в этих полях.
Собственно, первым должно быть полное имя класса анализатора StyleCop и может быть найдено из исходного кода (например, из здесь), Второй должен начинаться с кода правила, затем с двоеточия и имени перечисления правил (к счастью, он всегда выглядит как имя правила, отображаемое в редакторе параметров, но без пробелов).
2. Что касается подавления правил "глобально" - почему бы не отключить их через редактор настроек? Файлы настроек наследуются через файловую систему, поэтому вы можете легко иметь один "главный" файл настроек в "верхней части" структуры папок и некоторые другие файлы (имеющие "разницу" от основного) с исключениями, сделанными для некоторых проектов, если вы этого хотите (как описано здесь).
Удачи!
В качестве альтернативы вы можете переместить код в регионах на частичные классы. Тогда проблема с правилом стиля будет уходить.
Вы можете отключить ненужные правила в файле Settings.StyleCop, который находится в корневой папке проекта. Вам понадобится пространство имен, содержащее правило, которое можно найти здесь: http://stylecop.soyuz5.com/StyleCop%20Rules.html
Settings.stylecop код файла для вашей справки:
<StyleCopSettings Version="105">
<Analyzers>
<Analyzer AnalyzerId="StyleCop.CSharp.LayoutRules">
<Rules>
<Rule Name="ElementsMustBeSeparatedByBlankLine">
<RuleSettings>
<BooleanProperty Name="Enabled">False</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
<AnalyzerSettings />
</Analyzer>
</Analyzers>
</StyleCopSettings>
В дополнение к полезным ответам уже на месте:
Если вы подавляете предупреждение в файле подавления GlobalSuppressions.cs
, вы можете отредактировать эту строку [assembly: SuppressMessage(StyleCop...blabla
и полностью удалить теги Scope=...
и Target=...
Это делает подавление глобальным. в проекте.
README.md для пакета NuCet StyleCop.Analyzers, используемого Visual Studio 2015+, содержит ссылку на документацию для правил. Документация для каждого правила содержит раздел "Как пресечь нарушения". Для правила SA1202 возможны следующие варианты:
[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
а также
#pragma warning disable SA1202 // ElementsMustBeOrderedByAccess
#pragma warning restore SA1202 // ElementsMustBeOrderedByAccess