知道为什么MSBuild会突然开始对我的解决方案中的其他项目执行代码分析吗?

时间:2018-12-02 22:23:57

标签: msbuild code-analysis fxcop stylecop

我一直在忙于为我们的一种解决方案打开代码分析功能。星期五一切进展顺利。

我已将以下内容添加到我们的csproj文件的一个 中:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <CodeAnalysisRuleSet>ca.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2" />
    <PackageReference Include="StyleCop.Analyzers" Version="1.0.2" />
</ItemGroup>

并在星期五花一些时间来处理警告,例如:

  1. 禁用ca.ruleset中的所有警告
  2. 启用一个
  3. 修复所有实例
  4. 重新构建解决方案以验证修复程序
  5. GOTO 2

这一直很好。我是今天早上来的,从我上次停下来的地方去接站,除了当我到达第4步(重建解决方案)时,突然从单元测试项目中收到3k +警告。

我不确定为什么现在将代码分析应用于另一个项目,并且我似乎无法禁用它。

一些观察:

  • 单元测试项目的csproj文件没有对FxCop或StyleCop的引用。
  • 它也不以任何方式引用ruleset.ca
  • dotnet clean没有帮助
  • 签出另一个分支(一个未打开任何CA的分支)将停止两个项目的分析(如预期的那样),但是切换回结果将再次对它们进行分析。
  • 我正在使用VS Code,因此无法使用人们似乎(根据我的Google搜索)建议的任何关于GUI问题的GUI设置
  • 我的.sln文件似乎根本没有对CA的任何引用-这只是通常的项目和构建定义。

我开始认为这一定是MSBuild的问题。

有人曾见过吗?解决的是什么?


更新:与MSBuild团队有filed a bug

根据错误报告,这似乎是MSBuild的常规问题,与任何特定环境无关。现在,我只添加一个通用的ignore规则集,但这并不理想。

1 个答案:

答案 0 :(得分:0)

通过我的错误报告找到了解决方法。

Nick Guerra suggested在主项目的csproj文件的PrivateAssets="All"语句中添加PackageReference

换句话说,对我来说,

<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2" />
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2" />

对此表示敬意:

<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.2" PrivateAssets="All" />
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2" PrivateAssets="All" />

稍后dotnet clean && dotnet build,所有这些警告都消失了!


该属性似乎强制执行了默认行为:应该将分析器视为直接添加到其的项目的私有属性。 Relevant bug.