目前我们正在从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.)没有解决方案宽包文件夹,我不知道任何变量或占位符,我可以在这里使用获取我的包的绝对或相对路径。
答案 0 :(得分:1)
您可以将.props
或.targets
个文件添加到软件包中的build
文件夹中,然后将它们导入到项目中。
在.props
文件上,您可以使用代表该文件所在文件夹的MSBuildThisFileDirectory
MSBuild变量。
答案 1 :(得分:1)
Thanks to Paulo. 我是怎么做到的:
这是我的NuGet包的结构。
解决方案很容易安静。您需要创建文件。一个名为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错误,并在滚动条中显示红色标记。