CodeAnalysisRuleSet 不适用于 Directory.Build.props

lis*_*ous 5 c# stylecop asp.net-core

当我使用Directory.Build.props文件定义StyleCop分析器及其自定义全局规则集时,不会考虑第二个规则集。我的意思是在全球范围stylecop.json内定义,但在一般情况下不起作用。Directory.Build.propsloans.ruleset

我尝试的所有这些都与此回购有关。

当我将StyleCop.Analyzers包安装到单个项目中并包含它时,loans.ruleset它适用于 WebAPI 项目(这可以通过提交cd1b1f253b4a4c精确反映)。然后我尝试将它们移至此处的全局工作ff8b017。结果是 StyleCop 有效,但规则集却无效。

概述如下:

    Directory: C:\Repos\LoansManagerRestApi


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       03.06.2019     08:50                LoansManager
d-----       03.06.2019     08:48                LoansManager.DAL
d-----       03.06.2019     08:48                LoansManager.Domain
d-----       03.06.2019     08:48                LoansManager.E2ETest
d-----       03.06.2019     08:48                LoansManager.Services
d-----       03.06.2019     08:48                LoansManager.UnitTest
d-----       03.06.2019     08:48                LoansManager.Util
-a----       02.06.2019     21:07           5912 .gitignore
-a----       03.06.2019     08:49            271 .stylecop.json
-a----       03.06.2019     08:57            338 Directory.Build.props
-a----       03.06.2019     08:51            348 loans.ruleset
-a----       02.06.2019     21:40           4208 LoansManager.sln
-a----       02.06.2019     21:07           1360 README.md
Run Code Online (Sandbox Code Playgroud)

目录.Build.props:

<Project>

  <PropertyGroup>
    <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)loans.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />

    <AdditionalFiles Include="$(MSBuildThisFileDirectory).stylecop.json" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

贷款规则集:

<RuleSet Name="StyleCopRules" Description="These rules configure StyleCop." ToolsVersion="1.0">
  <Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
    <Rule Id="SA1101" Action="None" />
    <Rule Id="SA1633" Action="None" />
    <Rule Id="SA1600" Action="None" />
    <Rule Id="SA1615" Action="None" />
  </Rules>
</RuleSet>
Run Code Online (Sandbox Code Playgroud)

总而言之,我需要帮助才能使用使用文件stylecop.jsonloans.ruleset规则应用于全局解决方案Directory.Build.props,而不是针对每个项目单独配置它。

lis*_*ous 1

使用简单文件导入包含 StyleCop 分析器依赖项及其设置(和文件)的stylecop.json.rulesetDirectory.Build.props

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <PackageReference Include="loans.stylecop" Version="1.0.0" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

即使在 VS EE 2019 v16.1.1 中,该问题也按预期工作,但它不是完美的解决方法,因为每个规则更改都需要包项目版本控制、构建和发布,因此它仍然不能满足我的期望