繁体   English   中英

如何配置 C# 解决方案以在任何代码样式违规时失败?

[英]How to configure C# solutions to fail on any code style violations?

我创建了一个示例 Web API 项目,并希望在我的 CI 管道期间强制执行编码约定(如果在开发过程中出现样式错误,则可以加分)。 基本上我只想为 C# 项目设置 eslint(来自 JavaScript 世界)。

我想在解决方案范围内强制执行这些规则,所以我在根目录中添加了一个Directory.Build.props文件,其中包含以下内容(我想使用Roslyn 分析器并在警告中失败)

<Project>
  <PropertyGroup Label="Compiler Settings">
     <EnableNETAnalyzers>true</EnableNETAnalyzers>
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
     <AnalysisMode>AllEnabledByDefault</AnalysisMode>
     <AnalysisLevel>latest</AnalysisLevel>
     <WarningLevel>5</WarningLevel>
  </PropertyGroup>
</Project>

接下来,我安装了dotnet 格式以访问dotnet format ./MySln.sln --verify-no-changes命令。

我将生成的WeatherForecastController修改为

using Microsoft.AspNetCore.Mvc;
using System;

namespace LinterCheckSample.Controllers;

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        string unused = "";

        return
            new
                List
                <
                    WeatherForecast
                >
                ()
                {
new                                                 WeatherForecast() {}
                };
    }
    
    private void Do() { }
}

运行格式命令时,我预计会出现以下情况,其中一些已被识别

  • System的冗余导入❌
  • 永远不会使用Summaries
  • Summaries的冗余数组创建表达式 ❌
  • _logger从未使用过 ❌
  • 从未unused过 ✅
  • WeatherForecast的冗余类型规范 ❌
  • 空格错误✅
  • 删除Get方法中的空行 ❌
  • 修复Get方法中的缩进 ❌
  • 方法Do从未使用过 ❌

我认为我缺少的一件事是 .editorconfig 文件? 我将Roslyn Analyzers .editorconfig复制粘贴到我的项目中,这有点帮助(它没有抓住所有这些)

如果我的方法是正确的方法,有什么可以改进的吗? Directory.Build.props文件)并且有一个官方的超级严格的 .editorconfig 吗?

如果我的方法是错误的,那么在 C# 世界中解决这个问题的正确方法是什么?

提前致谢

使用 R# 命令行工具无法实现的 AFAIK。

对于 Roslyn 分析器,它可以帮助在您的csproj文件中设置TreatWarningsAsErrors

<PropertyGroup>
  <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>

不要更改您的.csproj文件。 在解决方案目录中,添加一个Directory.Build.props文件,其中包含以下内容:

<Project>
  <PropertyGroup Label="Compiler Settings">
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
     <AnalysisMode>AllEnabledByDefault</AnalysisMode>
     <WarningLevel>5</WarningLevel>
  </PropertyGroup>
</Project>

根据您的需要调整设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM