【问题标题】:Code analysis rule set is not updated from nuget package代码分析规则集未从 nuget 包更新
【发布时间】:2020-05-22 14:15:54
【问题描述】:

我正在尝试使用 nuget 包中的自定义规则集文件。我将给定的 .props 添加到包的 build 文件夹中:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <CodeAnalysisRuleSet>MyProject.CodeAnalysis.ruleset</CodeAnalysisRuleSet>
        <RunCodeAnalysis>true</RunCodeAnalysis>
    </PropertyGroup>
</Project>

将nuget包安装到项目后,我看到规则集文件在包根文件夹中,路径正确:

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\MyProject.CodeAnalysis.3.0.0\build\MyProject.CodeAnalysis.props" Condition="Exists('..\packages\MyProject.CodeAnalysis.3.0.0\build\MyProject.CodeAnalysis.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

但 Visual Studio 没有看到正确的规则集。当我从 References -> Analyzers 打开活动规则集时,它指向不同的文件:MinimumRecommendedRules.ruleset。所以它使用的是这个文件中的规则,而不是我的。

我的 .nuspec 文件包含以下代码:

<files>
   <file src="MyProject.CodeAnalysis.ruleset" target="content/StyleCop" />
   <file src="build\**\*.*" target="build" />
</files>

Nuget Package Explorer 中 nuget 包的结构如下所示:

  • 构建
    • MyProject.CodeAnalysis.props
  • 内容
    • 风格警察
      • MyProject.CodeAnalysis.ruleset

我的配置是:

  • Visual Studio 2019,版本。 16.6.0
  • 项目目标:.NET Framework v4.7.2

我做错了什么?

附:我看到了这些帖子,但他们没有帮助我:

  1. Code Analysis is not working with ruleset from nuget package (from .props)
  2. Add code analysis ruleset through nuget package

【问题讨论】:

    标签: c# nuget visual-studio-2019 stylecop


    【解决方案1】:

    代码分析规则集未从 nuget 包更新

    我认为主要问题是您应该在构建文件夹中使用MyProject.CodeAnalysis.targets 文件而不是MyProject.CodeAnalysis.props 文件。

    正如this document所说,

    .props is added at the top of the project file; .targets is added at the bottom.
    

    所以当您使用.props 文件时,它会在您将文件导入项目之前读取自定义的 rulset 文件,因此您会错过该文件。

    要解决它,您应该使用.targets 文件。

    解决方案

    更新 1

    1) 更改为使用 build 文件夹中的 MyProject.CodeAnalysis.targets 文件,而不是 MyProject.CodeAnalysis.props

    2)在此文件中添加您的代码

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <CodeAnalysisRuleSet>MyProject.CodeAnalysis.ruleset</CodeAnalysisRuleSet>
            <RunCodeAnalysis>true</RunCodeAnalysis>
        </PropertyGroup>
    </Project>
    

    3) 相反,请在您的 .nuspec 文件中使用它。

    <files>
       <file src="MyProject.CodeAnalysis.ruleset" target="content" />
       <file src="build\**\*.*" target="build" />
    </files>
    

    4) 然后你打包你的nuget项目,安装到其他主项目时,你应该先构建项目,然后你会发现新的规则集文件在参考文献 --> 分析器

    在分析器中正确显示:

    另外,当您尝试根据建议创建新版本时,您应该首先,clean your global nuget cache 首先。一般情况下,删除C:\Users\xxx(current user)\.nuget\packages下的所有文件。

    此外,在.nuspec 文件中使用名为1.1.1 的新版本。

    &lt;version&gt;1.1.1&lt;/version&gt;

    然后新建一个net framework项目安装新版本的包再次测试。

    我们期待任何关注和反馈。我们期待您的来信。

    【讨论】:

    • 我尝试了您的建议,但不幸的是仍然有相同的结果:MinimumRecommendedRules.ruleset 处于活动状态。你有什么建议吗?
    • 实际上,您的项目已经使用了新的规则集。你可以点击References-->Analyzers,你可以看到它使用了新的MyProject.CodeAnalysis.ruleset文件,就像我展示的那样。首先,请清理nuget缓存,删除C:\Users\xxx\.nuget\packages下的所有文件。其次,当您使用我的功能打包此项目时,请尝试使用2.0.03.0.0等其他版本,以与之前的项目版本分开。然后新建一个net framework project 4.7.2 main project来安装这个新的nuget版本进行测试。
    猜你喜欢
    • 2013-12-14
    • 2018-06-02
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多