Я создаю 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?