【问题标题】:How can I configure Roslyn Analyzers in many projects?如何在许多项目中配置 Roslyn 分析器?
【发布时间】:2019-07-30 14:54:54
【问题描述】:

我想在我的组织中强制执行代码质量和一致的样式。

为此,我计划将Roslyn AnalyzersStyleCop 添加到我的项目中。

为了符合我们商定的编码标准,这些分析器需要额外配置。理想情况下,它们将使用.editorconfig like this 进行配置,否则使用using rule sets

在我的组织中,我们有许多项目、许多解决方案和许多存储库。我想尽可能广泛地执行这些标准。我不想在每个项目中都添加所有的分析器包和配置,有没有更好、更简单、更容易一致的方法来实现这一点?

我有一个想法,我可以为我的组织制作一个 NuGet 包,其中包含我的组织选择的分析器、任何配置,实际上还有可能创建的任何自定义分析器。这个“捆绑”包可以添加到每个项目中,避免繁琐且容易出错的重复。这可能吗,这甚至是个好主意吗?有其他人做过吗?

【问题讨论】:

    标签: c# .net-core stylecop roslyn-code-analysis


    【解决方案1】:

    您可以使用Directory.Build.props and Directory.Build.targets 为您的项目添加属性和目标。

    【讨论】:

      【解决方案2】:

      你可以做一些事情

      • 将 NuGet 包添加到项目中(这是我们在 工作场所),我们添加了 StyleCop 和 FxCop 以及我们的自定义设置。这是工作。分布很容易 这种情况。

      • 将 Directory.Build.props 和 Directory.Build.targets 添加为 @Paulo Morgado 提到 - 它们可以在项目级别和解决方案级别进行配置

      • 您也可以使用 editorConfig。它正在被广泛采用。 FxCop 和 StyleCop 都与 editorConfig 配合得很好。 EditorConfig 也可以打包在 Nuget 中并分发。 Integration FXCop with EditorConfig.

      例如,要创建一个nuget包,创建一个带有.nuspec文件的.net标准库,最基本的例子是

      <?xml version="1.0" encoding="utf-8"?>
      <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
        <metadata>
      
          <dependencies>
            <dependency id="StyleCop.Analyzers" version=""/>
            <dependency id="Microsoft.CodeAnalysis.FxCopAnalyzers" version=""/>
          </dependencies>
        </metadata>
      
      </package>
      

      当然,您可以包含自定义的编码规则,也可以包含它们。

      【讨论】:

      • 这听起来像我想要的,但我想要一个关于如何制作 NuGet 包的示例或说明。
      【解决方案3】:

      以下是使用 Microsoft.CodeAnalysis.NetAnalyzers 的 Directory.Build.props 文件示例。您可以将此文件放置在任何位置,它将影响可以在放置 .props 文件的目录的(子)目录中找到的所有解决方案/项目。

      <Project>
        <ItemGroup>
          <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
          </PackageReference>
        </ItemGroup>
      </Project>
      

      【讨论】:

        【解决方案4】:
        1. 对于现有项目,您可以创建一个脚本 (powershell) 并更新所有项目,以便将规则添加为一次性流程。
        2. 您可以设置自定义项目模板并将这些规则作为依赖项包含在内,并强制要求所有项目都应使用新创建的项目模板创建。
        3. 启用门控签入,然后像上面建议的那样,您可以将道具/目标添加到构建服务器上的“msbuild”并包含在默认构建目标中。如果项目没有设定标准,则检查失败。

        【讨论】:

          猜你喜欢
          • 2022-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-20
          • 1970-01-01
          相关资源
          最近更新 更多