web-dev-qa-db-ja.com

エラーとしての警告-Stylecop警告には適用されません

Stylecopの警告をエラーとして扱いたいのですが、うまくいきません。

私のプロジェクトは警告をエラーとして扱うように構成されており、実際の「コンパイラ警告」を使用してビルドすると、実際にコンパイラエラーが表示されます。ただし、「Stylecop警告」では、コンパイラ警告のみが表示されます。

この結果、Stylecopの警告が表示されても、TeamCityへのチェックインでCIビルドが中断されることはありません。

私はStylecop4.7.49でVS2013を使用しています。

私の設定:

  • プロジェクト->プロパティ->ビルド

    • 警告レベル:4
    • 警告の抑制:1591
    • 警告をエラーとして扱う:すべて
  • プロジェクト-> Stylecop設定->オプション

    • 違反をエラーとして扱う:チェック済み

実際のコンパイラ警告を含む、ビルドを正しく中断するサンプルコード:

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 ==========

ビルドを壊さないサンプルコード(私はそれを望んでいますが)、stylecop警告を含みます:

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 ==========
16
demoncodemonkey

Csprojファイルを変更して、次の構成を追加します。

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

一部の警告をエラーに昇格できない理由を説明する この回答 も参照してください。

22
ken2k

StyleCop.MSBuild NuGetパッケージを使用すると、MSBuildを使用してStyleCopを簡単に構成し、警告をエラーとして表示することができます。以下のようにプロジェクトファイルを変更する必要があります。

<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>

こちらの投稿全体をご覧ください。 警告をエラーとして扱うようにMSBuildでStyleCopを構成する

3
Saranga

StyleCop.MSBuild nugetパッケージを使用して、プロジェクトでスタイル警官を有効にしている場合。スタイルコップの警告をエラーとして有効にするには、別のnugetパッケージStyleCop.Error.MSBuildを追加するだけです( https://www.nuget.org/packages/StyleCop.Error.MSBuild/

ありがとう

1
Manish Kumar