知道为什么 MSBuild 会突然开始对我的解决方案中的其他项目执行代码分析吗?
Any idea why MSBuild would suddenly start performing code analysis on other projects in my solution?
我一直忙于为我们的一个解决方案打开代码分析。周五一切顺利。
我已将以下内容添加到 一个 的 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>
并在周五花一些时间处理警告,如下所示:
- 禁用 ca.ruleset
中的所有警告
- 启用一个
- 修复所有实例
- 重新构建解决方案以验证修复
- 转到 2
这一直运作良好。今天早上我来了,从我离开的地方继续,除了当我进行到第 4 步(重建解决方案)时,我突然收到来自单元测试项目的 3k+ 警告。
我不确定为什么现在将代码分析应用到另一个项目,而且我似乎无法禁用它。
一些观察:
- 单元测试项目的 csproj 文件没有引用 FxCop 或 StyleCop。
- 也不以任何方式提及 ruleset.ca
dotnet clean
没用
- 检查另一个分支(一个没有打开任何 CA 的分支)停止对两个项目的分析(如预期的那样),但切换回来会导致再次分析它们。
- 我正在使用 VS Code,因此无法使用人们似乎(根据我的谷歌搜索)建议的 CA 问题的任何 GUI 设置
- 我的 .sln 文件似乎根本没有任何对 CA 的引用 - 它只是通常的项目和构建定义。
我开始认为这一定是 MSBuild 的问题。
有没有人见过这个?修复了什么?
更新:与 MSBuild 团队filed a bug。
根据错误报告,这似乎是一般的 MSBuild 问题,与任何特定环境无关。现在我只想添加一个笼统的 ignore
规则集,但这并不理想。
通过我的错误报告找到了解决方法。
Nick Guerra suggested 将 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
之后,所有这些警告都消失了!
似乎这个属性强制执行了应该已经是默认行为的行为:分析器应该被视为对它们直接添加到的项目私有。 Relevant bug.
我一直忙于为我们的一个解决方案打开代码分析。周五一切顺利。
我已将以下内容添加到 一个 的 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>
并在周五花一些时间处理警告,如下所示:
- 禁用 ca.ruleset 中的所有警告
- 启用一个
- 修复所有实例
- 重新构建解决方案以验证修复
- 转到 2
这一直运作良好。今天早上我来了,从我离开的地方继续,除了当我进行到第 4 步(重建解决方案)时,我突然收到来自单元测试项目的 3k+ 警告。
我不确定为什么现在将代码分析应用到另一个项目,而且我似乎无法禁用它。
一些观察:
- 单元测试项目的 csproj 文件没有引用 FxCop 或 StyleCop。
- 也不以任何方式提及 ruleset.ca
dotnet clean
没用- 检查另一个分支(一个没有打开任何 CA 的分支)停止对两个项目的分析(如预期的那样),但切换回来会导致再次分析它们。
- 我正在使用 VS Code,因此无法使用人们似乎(根据我的谷歌搜索)建议的 CA 问题的任何 GUI 设置
- 我的 .sln 文件似乎根本没有任何对 CA 的引用 - 它只是通常的项目和构建定义。
我开始认为这一定是 MSBuild 的问题。
有没有人见过这个?修复了什么?
更新:与 MSBuild 团队filed a bug。
根据错误报告,这似乎是一般的 MSBuild 问题,与任何特定环境无关。现在我只想添加一个笼统的 ignore
规则集,但这并不理想。
通过我的错误报告找到了解决方法。
Nick Guerra suggested 将 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
之后,所有这些警告都消失了!
似乎这个属性强制执行了应该已经是默认行为的行为:分析器应该被视为对它们直接添加到的项目私有。 Relevant bug.