Предупреждения как ошибки - не относится к предупреждениям Stylecop
Я хочу рассматривать предупреждения Stylecop как ошибки, но это не работает для меня.
Мои проекты настроены так, чтобы обрабатывать предупреждения как ошибки, и если я строю с помощью реального "предупреждения компилятора", он действительно отображает ошибку компилятора. Но с предупреждением "Stylecop" он отображает предупреждение о компиляторе.
В результате этого мой checkin для TeamCity досадно не нарушает сборку CI, когда есть предупреждения Stylecop.
Я использую VS2013 со Stylecop 4.7.49.
Мои настройки:
Пример кода, который правильно разбивает сборку, содержащий предупреждение реального компилятора:
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/)
Спасибо