Как подавить предупреждение StyleCop? - PullRequest
52 голосов
/ 20 июля 2010

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

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

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

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

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

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

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

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

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

Ответы [ 12 ]

47 голосов
/ 21 июля 2010

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

[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess")]
20 голосов
/ 20 июля 2010

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

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

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

9 голосов
/ 19 сентября 2011

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

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

но там написано -

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

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

7 голосов
/ 20 июля 2010

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

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

4 голосов
/ 09 апреля 2013

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

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

[SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed.")]
4 голосов
/ 20 июля 2010

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

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

3 голосов
/ 14 августа 2018
  1. Перейти в Solution Explorer
  2. Перейти к вашему проекту
  3. Развернуть ссылки
  4. Развернуть Анализаторы
  5. Развернуть StyleCop.Analyzers
  6. Щелкните правой кнопкой мыши на определенном правиле, которое вы хотите отключить на глобальном (проектном) уровне
  7. Установить уровень набора правил -> Выбрать Нет
2 голосов
/ 19 сентября 2011

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

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

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

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

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

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

Удачи!

1 голос
/ 09 марта 2018

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

Кроме того, вы можете переместить код в регионах в частичные классы. Тогда проблема с правилом stylecop исчезнет.

...