【问题标题】:How to ship the stylecop.json and custom.ruleset files with a NuGet package in VS2017如何在 VS2017 中使用 NuGet 包发送 stylecop.json 和 custom.ruleset 文件
【发布时间】:2018-07-29 22:57:50
【问题描述】:

目前我们正在从 VS2015 切换到 VS2017。我们的升级步骤之一是从 stylecop 切换到新的 Stylecop.Analyzer 包。新的 Stylecop 使用 2 个文件。 stylecop.json 和 Stylecop.ruleset。

目标:我想将 stylecop 文件作为自定义 nuget 包提供。但我不知道如何创建所需的 .csproj 条目。

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
...
        <CodeAnalysisRuleSet>packages\My.StyleCop.1.0.0-pre15\RuleSet\My.StyleCop.ruleset</CodeAnalysisRuleSet>
    </PropertyGroup>    
...
    <ItemGroup>
        <AdditionalFiles Include="packages\My.StyleCop.1.0.0-pre15\Config\stylecop.json">
            <Link>stylecop.json</Link> 
        </AdditionalFiles>  
    </ItemGroup>
</Project>

过去,有可能使用 install.ps1 脚本来做这些事情。但是对于 NuGet 3.(或 4.),安装脚本已过时,将被忽略。

我已经尝试过使用 My.StyleCop.targets:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <AdditionalFiles Include="packages\My.StyleCop.1.0.0-pre17\Config\stylecop.json">
          <Link>stylecop.json</Link> 
        </AdditionalFiles>    
    </ItemGroup>
</Project>

但在这里我也有一些问题。由于 NuGet 3.(或 4.)没有解决方案范围的包文件夹,而且我不知道可以在此处使用的任何变量或占位符来获取包的绝对或相对路径。

【问题讨论】:

    标签: msbuild visual-studio-2017 nuget stylecop


    【解决方案1】:

    您可以将.props.targets 文件添加到包中的build 文件夹中,它们将被导入到项目中。

    .props 文件上,您可以使用代表该文件所在文件夹的MSBuildThisFileDirectory MSBuild 变量。

    【讨论】:

    • 非常感谢。这就是我需要的提示!
    【解决方案2】:

    Thanks to Paulo. 我是怎么做到的:

    这是我的 NuGet 包的结构。

    解决方案很简单。您需要创建文件。一个 .props 和一个 .targets 文件命名为 NuGet 包,并将它们放在包的 build 文件夹中。

    在这些 MSBuild 文件中,您可以使用 $(MSBuildThisFileDirectory) 变量来获取 NuGet 包的路径。

    MSBuildThisFileDirectory  = C:\Users\UserName\.nuget\packages\sig.stylecop\1.0.0-pre23\build\
    

    我的 SIG.StyleCop.props 文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)\..\RuleSet\SIG.combiLink.ruleset</CodeAnalysisRuleSet>
        </PropertyGroup>
    </Project>
    

    我的 SIG.StyleCop.targets 文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <ItemGroup>
            <AdditionalFiles Include="$(MSBuildThisFileDirectory)\..\Config\stylecop.json">
                <Link>stylecop.json</Link> 
            </AdditionalFiles>    
        </ItemGroup>    
    </Project>
    

    由于我的包的结构,我需要导航 (..) 到 Config 和 RuleSet 文件夹。

    【讨论】:

    • 只是检查,但您真的要覆盖 CodeAnalysisRuleSet 属性吗?
    • 在我们的例子中,我认为没问题。我们正在发布我们自己的规则集。不知道有没有可以扩展现有规则集的函数。
    • 我已经在 .Net 标准 2.0 项目中尝试过您的解决方案,但我似乎无法连接配置。有什么想法吗?
    【解决方案3】:

    变量 $(MSBuildThisFileDirectory) 已经在末尾包含反斜杠。在引用规则集和 stylecop.json 文件时省略反斜杠很重要:

    &lt;CodeAnalysisRuleSet&gt;$(MSBuildThisFileDirectory)..\RuleSet\SIG.combiLink.ruleset&lt;/CodeAnalysisRuleSet&gt;

    &lt;AdditionalFiles Include="$(MSBuildThisFileDirectory)..\Config\stylecop.json"&gt;

    由于双反斜杠,我在 Visual Studio 2017 中遇到了两个奇怪的问题:

    • 单元测试在我每次启动它们时都会重建代码,即使没有任何代码更改

    • IDE 在“错误列表”窗口中显示许多 StyleCop 错误,并在滚动条中显示红色标记,即使对于在规则集中明确禁用的规则也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 2015-07-14
      • 2017-08-12
      • 2017-11-21
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多