Как выбрать другой набор правил на основе OutputType в Visual Studio? - PullRequest
0 голосов
/ 12 апреля 2019

В настоящее время у меня есть проект .Net Standard, который ссылается на StyleCop.Он построен как пакет NuGet и включает в себя пользовательские ruleset и пользовательский props файл.Мне бы хотелось, чтобы файл props применил другой набор правил на основе типа вывода проекта, который ссылается на мой пакет NuGet.

Я хочу добавить этот пакет NuGet в решение, которое включает в себя различные типы проектов, такие как ClassБиблиотека или Windows Forms.Разным типам проектов нужен разный набор правил.Например, я не хочу форсировать документацию в приложении Windows Forms, но хочу форсировать его в проекте библиотеки классов.

Я пытаюсь сделать это, используя Condition s, но набор правил 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?(Я знаю, что это было доступно в прошлом, но списано)

...