代码之家  ›  专栏  ›  技术社区  ›  Tom Wright

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

  •  0
  • Tom Wright  · 技术社区  · 7 年前

    我一直在忙着为我们的一个解决方案打开代码分析。星期五一切都很顺利。

    <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(重建解决方案)时,我突然收到来自单元测试项目的3k+警告。

    我不知道为什么代码分析现在被应用到另一个项目中,我似乎无法禁用它。

    • 单元测试项目的csproj文件没有对FxCop或StyleCop的引用。
    • 它也没有以任何方式引用ruleset.ca
    • dotnet clean
    • 签出另一个分支(其中一个分支没有打开任何CA)会停止对这两个项目的分析(如预期的那样),但切换回该分支会导致再次分析这两个项目。
    • 我的.sln文件似乎根本没有对CA的任何引用-它只是通常的项目和构建定义。

    以前有人见过这个吗?怎么了?


    更新: filed a bug

    ignore 规则集,但并不理想。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tom Wright    7 年前

    Nick Guerra suggested PrivateAssets="All" PackageReference 我的主要项目的csproj文件中的语句。

    换句话说,对我来说:

    <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.