2010-07-20 4 views
48

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

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

Я искал в Интернете, но still not sure как сделать сдерживающей.

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

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

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

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

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

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

+3

В идеале, щелкните правой кнопкой мыши «Погасить» (или справа -click, 'fix'). Но StyleCop был написан мазохистами, поэтому вам придется утомительно исправить все свои проблемы вручную. Если когда-либо была работа, предназначенная для работы с машиной, это все. Какая трата. –

ответ

4

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

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

+0

Я только что добавил причину, по которой я не могу подобрать коды. См. Мой отредактированный вопрос. –

6

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

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

18

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

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

Я попытался щелкнуть правой кнопкой мыши предупреждение (в списке «Ошибка/Предупреждение»), но контекстный пункт меню не позволяет мне его подавить. Я использую VS 2010. Знаете ли вы, почему? –

+0

@Nam - Не уверен, пример, который я цитирую, использует vs2008. позвольте мне запустить 2010 год и заглянуть. –

+0

@poet: Я размещаю свой связанный с этим вопрос здесь http://stackoverflow.com/questions/3287957/how-to-supress-stylecop-warning-sa1201-all-methods-must-be-placed-after-all- pro –

44

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

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

Как вы вывели эти две магические струны? Все опубликованные OP были кодом SA1202. У меня аналогичная проблема (код «SP0100»), и я не могу вывести соответствующие строки. –

+0

@Colonel Panic: вы можете получить первую строку из предупреждающего сообщения StyleCop при ее запуске. Например. «SA1202: CSharp.OrderingRules: blahblah». Затем откройте файл настроек StyleCop с помощью редактора и выполните поиск с кодом SA, чтобы найти фактическое правило, и это краткое имя. – Hirvox

+6

, если вы перейдете по адресу http://www.stylecop.com/docs/SA1202.html (или аналогичные URL-адреса страницы для других предупреждений), вы можете найти очень четкие сведения о синтаксисе подавления сообщений. – Seph

1

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

9

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

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

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

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

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

+0

Информация предоставлена здесь тоже - http://blogs.msdn.com/b/sourceanalysis/archive/2009/08/10/rule-suppressions.aspx – akjoshi

2

1. В вашем случае, верный признак SuppressMessage хотел бы, как в следующем:

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

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

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

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

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

Удачи вам!

2

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

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

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

Вы можете отключить правила, которые вы не хотите в 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> 
+0

Это было бы более полезно, если бы вы могли показать пример se se которые может понадобиться OP. – sorak

Смежные вопросы