Подтвердить что ты не робот

Как подавить предупреждение StyleCop?

Я использую StyleCop и хочу отключить некоторые предупреждения, которые не соответствуют моему стилю. Я предпочитаю иметь решение для

1) подавление встроенного кода
2) подавление глобальных настроек

Я искал в Интернете, но все еще не уверен, как сделать подавление.

Для метода 1) Они сказали добавить строки:

[assembly: SuppressMessage ("Microsoft.Design", "SA1202: все частные методы должны быть размещены после всех открытых методов", Scope = "namespace", Target = "Consus.Client.ClientVaultModule.Services.OnlineDetection")]

Но они не говорят, где и какое пространство имен будет использоваться.

Что касается метода 2), они сказали, что используют файл GlobalSuppress, но в данный момент, кажется, нелегко найти способ как это сделать.

Пожалуйста помоги.

[Отредактировано] В моем случае у меня есть предупреждение о SA1202: все частные методы должны быть размещены после всех открытых методов, что мешает, так как я группирую свои связанные коды в регионы. Я хочу подавить эти предупреждения только для некоторых определенных методов.

4b9b3361

Ответ 1

Вот что вам нужно:

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]

Ответ 2

Пример встроенного подавления будет схож с этим - рассмотрите пространства имен в коде по сравнению с подавлением

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)")]

И вы можете сгенерировать этот код автоматически, щелкнув правой кнопкой мыши на предупреждении.

Ответ 3

Начиная с StyleCop 4.3.2, можно подавить отчет о нарушениях правил, добавив атрибуты подавления в исходный код.

Подавление правил http://stylecop.soyuz5.com/Suppressions.html

но он говорит -

Глобальные подавления

StyleCop не поддерживает понятие глобальных подавлений или подавление уровня файла. Подавления должны быть помещены в код элемент.

Ответ 4

Если вы установили StyleCop, вы можете щелкнуть правой кнопкой мыши свой проект, и будет установлен параметр StyleCop. Нажмите эту кнопку, и вы увидите, что некоторые правила могут быть запрещены даже против вашего проекта. Кроме того, вы можете создать отдельный файл правил для совместного использования между различными проектами. Это означает, что вы можете настроить правила как только они захотите, а затем поделиться этой конфигурацией между всеми вашими проектами.

Для индивидуальных переопределений SuppressMessage - это путь.

Ответ 5

Нельзя ли просто удалить правило, а не загрязнять свой код?

То же самое касается FxCop...

Ответ 6

Прочтите предупреждение от Style Cop, ища буквенно-цифровой код. В вашем случае "SA1202". Затем перейдите на соответствующую страницу на веб-сайте Style Cop. Измените URL-адрес соответствующим образом http://www.stylecop.com/docs/SA1202.html

Скопируйте строку с надписью "Как подавить нарушения". Вставьте атрибут над классом, по которому стиль Cop стонет

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]

Ответ 7

  1. Перейти в обозреватель решений
  2. Перейти к вашему проекту
  3. Развернуть ссылки
  4. Развернуть Анализаторы
  5. Развернуть StyleCop.Analyzers
  6. Щелкните правой кнопкой мыши на определенном правиле, которое вы хотите отключить на глобальном (проектном) уровне.
  7. Установить важность набора правил → Выбрать Нет

Ответ 8

1. В вашем случае правильный атрибут SuppressMessage должен выглядеть следующим образом:

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
private void SomeMethod()
{
}

Обратите внимание, что вы можете поместить его на любой другой элемент (например, на класс - тогда все подобные нарушения во всем классе будут подавлены).

Я также согласен с тем, что совершенно неочевидно, что писать в этих полях.

Собственно, первым должно быть полное имя класса анализатора StyleCop и может быть найдено из исходного кода (например, из здесь), Второй должен начинаться с кода правила, затем с двоеточия и имени перечисления правил (к счастью, он всегда выглядит как имя правила, отображаемое в редакторе параметров, но без пробелов).

2. Что касается подавления правил "глобально" - почему бы не отключить их через редактор настроек? Файлы настроек наследуются через файловую систему, поэтому вы можете легко иметь один "главный" файл настроек в "верхней части" структуры папок и некоторые другие файлы (имеющие "разницу" от основного) с исключениями, сделанными для некоторых проектов, если вы этого хотите (как описано здесь).

Удачи!

Ответ 9

В качестве альтернативы вы можете переместить код в регионах на частичные классы. Тогда проблема с правилом стиля будет уходить.

Ответ 10

Вы можете отключить ненужные правила в файле 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>

Ответ 11

В дополнение к полезным ответам уже на месте:

Если вы подавляете предупреждение в файле подавления GlobalSuppressions.cs, вы можете отредактировать эту строку [assembly: SuppressMessage(StyleCop...blabla и полностью удалить теги Scope=... и Target=... Это делает подавление глобальным. в проекте.

Ответ 12

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