知道为啥 MSBuild 会突然开始对我的解决方案中的其他项目执行代码分析吗?
Posted
技术标签:
【中文标题】知道为啥 MSBuild 会突然开始对我的解决方案中的其他项目执行代码分析吗?【英文标题】:Any idea why MSBuild would suddenly start performing code analysis on other projects in my solution?知道为什么 MSBuild 会突然开始对我的解决方案中的其他项目执行代码分析吗? 【发布时间】:2018-12-02 22:23:57 【问题描述】:我一直忙于为我们的一种解决方案启用代码分析。周五一切顺利。
我在我们的 一个 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.cadotnet clean
没有帮助
检出另一个分支(未打开任何 CA 的分支)会停止对两个项目的分析(如预期的那样),但切换回会导致它们都被再次分析。
我正在使用 VS Code,因此无法使用人们似乎(根据我的谷歌搜索)建议解决 CA 问题的任何 GUI 设置
我的 .sln 文件似乎根本没有对 CA 的任何引用 - 它只是通常的项目和构建定义。
我开始认为这一定是 MSBuild 的问题。
有人见过这个吗?解决方法是什么?
更新:与 MSBuild 团队联系filed a bug。
根据错误报告,这似乎是一般的 MSBuild 事情,与任何特定环境无关。现在我只想添加一个毯子ignore
规则集,但这并不理想。
【问题讨论】:
程序集的包引用可以传播到依赖于该程序集的所有项目。 github.com/NuGet/Home/issues/5715 @LexLi 谢谢。所以这可能是“为什么?”知道如何修复它/解决它吗? hm 但构建和分析器通常不会跨 p2ps 流动(PrivateAssets 的默认设置)。它是否也发生在命令行构建或仅在 VS 内部? @MartinUllrich 遗憾的是,也在命令行构建中。我刚刚在 CMD 和 Git Bash 中尝试过。 Even members of the VS team at Microsoft don't always know what MS Build is doing 【参考方案1】:通过我的错误报告找到了解决方法。
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.
【讨论】:
以上是关于知道为啥 MSBuild 会突然开始对我的解决方案中的其他项目执行代码分析吗?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的电脑会突然之间变成蓝屏,上面会有一串英文和数字,要重起电脑后才会好~~大家如果知道请告诉我
为啥我无法使用项目解决方案文件在 Msbuild Teamcity 中构建测试项目?