c# – 警告作为错误 – 不适用于Stylecop警告

我想把Stylecop警告视为错误,但是对我来说并不奏效.

我的项目配置为将警告视为错误,如果我使用真正的“编译器警告”构建,它确实会显示编译器错误.但是使用“Stylecop警告”它只显示编译器警告.

因此,当有Stylecop警告时,我对TeamCity的登录很麻烦,不会打破CI建立.

我使用VS2013与Stylecop 4.7.49.

我的设置:

>项目 – >属性 – >建立

>警告级别: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,0 skipped ==========

解决方法

修改您的csproj文件添加以下配置:
<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    ...
    <StylecopTreatErrorsAsWarnings>false</StylecopTreatErrorsAsWarnings>
  </PropertyGroup>

另见this answer,这解释了为什么有些警告不能被提升为错误.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...