Предупреждения как ошибки - не относится к предупреждениям Stylecop

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

Мои проекты настроены так, чтобы обрабатывать предупреждения как ошибки, и если я строю с помощью реального "предупреждения компилятора", он действительно отображает ошибку компилятора. Но с предупреждением "Stylecop" он отображает предупреждение о компиляторе.

В результате этого мой checkin для TeamCity досадно не нарушает сборку CI, когда есть предупреждения Stylecop.

Я использую VS2013 со Stylecop 4.7.49.

Мои настройки:

  • Проект → Свойства → Сборка

    • Уровень предупреждения: 4
    • Подавлять предупреждения: 1591
    • Лечить предупреждения как ошибки: Все
  • Проект → Настройки стиля → Параметры

    • Относитесь к нарушениям как к ошибкам: Проверено

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

using System;

namespace CodeUsageTest
{
    public class CodeUsage
    {
        private string fff()
        {
            int nobodyLovesMe; //CS0168
            return "";
        }
    }
}

Создать вывод:

1>------ Build started: Project: CodeUsageTest, Configuration: Debug Any CPU ------
1>D:\Sandbox\CodeUsageTest\CodeUsage.cs(9,17,9,30): error CS0168: Warning as Error: The variable 'nobodyLovesMe' is declared but never used
========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========

Пример кода, который не разбивает сборку (хотя я хочу ее), содержащий предупреждение о стилевом стиле:

using System;

namespace CodeUsageTest
{
    public class CodeUsage
    {
        private string fff() //SA1300
        {
            return ""; //SA1122
        }
    }
}

Создать вывод:

1>------ Build started: Project: CodeUsageTest, Configuration: Debug Any CPU ------
1>D:\Sandbox\CodeUsageTest\CodeUsage.cs(7,1): warning : SA1300 : CSharp.Naming : method names begin with an upper-case letter: fff.
1>D:\Sandbox\CodeUsageTest\CodeUsage.cs(9,1): warning : SA1122 : CSharp.Readability : Use string.Empty rather than "".
========== Build: 1 succeeded, 0 failed, 3 up-to-date, 0 skipped ==========

Ответ 1

Измените файл csproj, чтобы добавить следующую конфигурацию:

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    ...
    <StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
  </PropertyGroup>

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

Ответ 2

Вы можете легко настроить StyleCop с помощью MSBuild, чтобы предупреждения отображались как ошибки с помощью пакета StyleCop.MSBuild NuGet. Вам необходимо изменить файл проекта, как показано ниже.

<PropertyGroup>
  <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  <StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
</PropertyGroup>

Кроме того, чтобы игнорировать автоматически созданные файлы, вы можете изменить файл Settings.StyleCop, как показано ниже.

<CollectionProperty Name="GeneratedFileFilters">
  <Value>\.g\.cs$</Value>
  <Value>\.generated\.cs$</Value>
  <Value>\.g\.i\.cs$</Value>
  <Value>TemporaryGeneratedFile_.*\.cs$</Value>
</CollectionProperty>

Посмотреть полный пост здесь. Настроить StyleCop с помощью MSBuild для обработки предупреждений как ошибок

Ответ 3

Если вы используете пакет StyleCop.MSBuild nuget, чтобы включить стиль cop в ваши проекты. Чтобы включить оповещения в стилевом стиле, как ошибки, просто добавьте еще один пакет nuget StyleCop.Error.MSBuild(https://www.nuget.org/packages/StyleCop.Error.MSBuild/)

Спасибо