如何在多个项目中配置Roslyn分析器?

20

我希望在组织中实施代码质量和一致的样式。

为此,我计划将Roslyn分析器StyleCop添加到我的项目中。

为了满足我们约定的编码标准,这些分析器需要进行额外的配置。最好使用.editorconfig进行配置,如果无法使用,则使用规则集进行配置

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

我有一个想法,我可以制作一个NuGet包,针对我们的组织,该包包含我们选择的分析器、任何配置以及可能创建的任何自定义分析器。这个“捆绑”包可以添加到每个项目中,避免重复枯燥和容易出错。这是可行的吗?这是个好主意吗?有没有其他人这样做过?

4个回答

6

4

有几件事情你可以做:

  • 向项目中添加NuGet包(这是我们工作场所的做法),我们添加了StyleCop和FxCop,并在此基础上进行了自定义设置。它正在运行。在这种情况下,分发非常容易。

  • 按照@Paulo Morgado的建议添加Directory.Build.props和Directory.Build.targets - 它们可以在项目级别和解决方案级别进行配置

  • 您还可以使用editorConfig。它被广泛采用。FxCop和StyleCop与editorConfig配合非常好。EditorConfig也可以打包在Nuget中并分发。将FXCop与EditorConfig集成。

例如,要创建一个nuget包,请创建一个带有.nuspec文件的.netstandard库,最基本的示例如下:

<?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包的说明。 - Jodrell

1
以下是使用Microsoft.CodeAnalysis.NetAnalyzers的Directory.Build.props文件示例。您可以将此文件放在任何地方,并且它将对放置.props文件的目录(子)目录中找到的所有解决方案/项目产生影响。请保留HTML标签。
<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>

0
1. 对于现有项目,您可以创建一个脚本(PowerShell),并更新所有项目,使规则作为一次性过程添加。 2. 您可以设置自定义项目模板,并将这些规则作为依赖项包含其中,并强制要求所有项目都使用新创建的项目模板进行创建。 3. 启用门控检入,然后像上面某人建议的那样,在构建服务器上向“msbuild”添加属性/目标,并包括在默认构建目标中。如果项目没有设置标准,则检入失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接