Исключить пакет NuGet на основе значения пользовательского свойства в файле MSBuild - PullRequest
1 голос
/ 19 января 2020

Я создаю C# решение, которое имеет несколько проектов и файл Directory.Build.props на его root со следующим содержимым:

<Project>
  <PropertyGroup>
    <IsRelevantProject>false</IsRelevantProject>
    <IsRelevantProject Condition="$(MSBuildProjectName.StartsWith('Relevant')) == true">true</IsRelevantProject>
    <LangVersion Condition="'$(IsRelevantProject)' == 'false'">8</LangVersion>
    <LangVersion Condition="'$(IsRelevantProject)' == 'true'">7.3</LangVersion>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Condition="'$(IsRelevantProject)' == 'false'" Include="Microsoft.VisualStudio.Threading.Analyzers" Version="16.5.124-alpha" />
  </ItemGroup>
</Project>

Я пытаюсь включить Microsoft.VisualStudio.Threading.Analyzers Пакет NuGet только в проектах, у которых для свойства IsRelevantProject установлено значение false, но кажется, что условие игнорируется, поскольку во все проекты включен пакет. Условие отлично работает на LangVersion, я проверил, что проекты скомпилированы с ожидаемым аргументом /langversion cs c.

Я попытался использовать значение встроенного свойства (Condition="'$(Configuration)' == 'Debug'" ) и это, кажется, работает нормально. Пакет NuGet включается только тогда, когда конфигурация настроена на отладку. Разве нельзя использовать пользовательское свойство или включать пакет только в определенные проекты на основе имени проекта или когда оно определено в общем файле MSBuild?

1 Ответ

0 голосов
/ 20 января 2020

Оказывается, моя проблема была указана c для использования пакета Analyzer. Они применяются к проекту, на котором они установлены, и ко всем зависимым проектам. После добавления PrivateAssets="all" к PackageReference он начал работать как положено.

...