如何在Visual Studio中基于OutputType选择其他规则集?

时间:2019-04-12 16:11:20

标签: visual-studio msbuild stylecop analyzer vsprops

当前,我有一个引用StyleCop的.Net Standard项目。它以NuGet软件包的形式生成,并包含自定义ruleset和自定义props文件。我希望props文件根据引用我的NuGet包的项目的输出类型应用不同的规则集。

我想将此NuGet程序包添加到包含不同项目类型(例如类库或Windows窗体)的解决方案中。不同的项目类型需要不同的规则集。例如,我不想强​​加Windows Forms应用程序上的文档,但我想强加于类库项目中。

我正在尝试使用Condition来执行此操作,但是始终使用默认的StyleCop规则集。

我也不知道调试项目和props文件的方法,以确保包含规则集。

这是我的props文件。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <CodeAnalysisRuleSetLocation Condition=" '$(NuGetPackageRoot)' != '' ">$(NuGetPackageRoot)\CustomStyleCop\1.0.0</CodeAnalysisRuleSetLocation>
    <CodeAnalysisRuleSetLocation Condition=" '$(CodeAnalysisRuleSetLocation)' == '' and '$(SolutionDir)' != '' ">$(SolutionDir)\packages\CustomStyleCop.1.0.0</CodeAnalysisRuleSetLocation>
    <CodeAnalysisRuleSetLocation Condition=" '$(CodeAnalysisRuleSetLocation)' == '' ">$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))\packages\CustomStyleCop.1.0.0</CodeAnalysisRuleSetLocation>
  </PropertyGroup>

  <PropertyGroup>
    <CodeAnalysisRuleSet>
    <CodeAnalysisRuleSet Condition=" '$(OutputType)' == 'Library' ">$(CodeAnalysisRuleSetLocation)\CustomStyleCopClassLibrary.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRuleSet Condition=" '$(OutputType)' == 'Exe' or '$(OutputType)' == 'WinExe' ">$(CodeAnalysisRuleSetLocation)\CustomStyleCopForms.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>

  <ItemGroup>
    <AdditionalFiles Include="$(CodeAnalysisRuleSetLocation)\stylecop.json" Link="stylecop.json" />
  </ItemGroup>

</Project>

还有我的nuspec文件。

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>CustomStyleCop</id>
    <title>CustomStyleCop</title>
    <version>1.0.0</version>
    <developmentDependency>true</developmentDependency>
    <dependencies>
      <dependency id="StyleCop.Analyzers" version="[1.1.1-rc.114]" />
    </dependencies>
  </metadata>
  <files>
    <file src="stylecop.json" target="" />
    <file src="Rulesets\CustomStyleCopClassLibrary.ruleset" target="" />
    <file src="Rulesets\CustomStyleCopForms.ruleset" target="" />
    <file src="CustomStyleCop.props" target="build" />
  </files>
</package>

这有可能吗? 还是每个项目类型都需要不同的NuGet软件包? 当前是否有调试msbuild的方法? (我知道它过去曾经可用,但已报废)

0 个答案:

没有答案