如何在VS2017中使用NuGet包发送stylecop.json和custom.ruleset文件

时间:2018-02-19 16:55:22

标签: msbuild visual-studio-2017 nuget stylecop

目前我们正在从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.)没有解决方案宽包文件夹,我不知道任何变量或占位符,我可以在这里使用获取我的包的绝对或相对路径。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

这是我的NuGet包的结构。

enter image description here

解决方案很容易安静。您需要创建文件。一个名为NuGet包的.props和.targets文件,并将它们放在包的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文件夹。

答案 2 :(得分:1)

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

<CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)..\RuleSet\SIG.combiLink.ruleset</CodeAnalysisRuleSet>

<AdditionalFiles Include="$(MSBuildThisFileDirectory)..\Config\stylecop.json">

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

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

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