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

问题描述

我一直忙于为我们的一种解决方案启用代码分析。周五一切顺利。

我已将以下内容添加到我们的一个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. 转到 2

这一直工作得很好。我今天早上进来,从我离开的地方开始,除了当我进入第 4 步(重建解决方案)时,我突然收到来自我们的单元测试项目的 3k+ 警告。

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

一些观察:

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

有没有人见过这个?解决方法是什么?


更新:已向MSBuild团队提交了一个错误。

根据错误报告,这似乎是一般的 MSBuild 事情,与任何特定环境无关。现在我只是要添加一个全面的ignore规则集,但这并不理想。

标签: msbuildcode-analysisfxcopstylecop

解决方案


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

Nick Guerra 建议PrivateAssets="All"在我的主项目的 csproj 文件中添加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,所有这些警告都消失了!


似乎这个属性强制执行应该已经是默认行为:分析器应该被视为对它们直接添加到的项目来说是私有的。相关的错误。


推荐阅读