我正在构建一个 C# 解决方案,该解决方案具有多个项目,根目录下有一个Directory.Build.props
文件,其中包含以下内容:
<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>
我正在尝试仅在IsRelevantProject
属性设置为 false 的项目中包含Microsoft.VisualStudio.Threading.Analyzers
NuGet 包,但似乎该条件被忽略了,因为所有项目都包含该包。该条件在LangVersion
上工作正常,我已经验证了项目是使用预期的/langversion
csc 参数编译的。
我尝试使用内置属性值(Condition="'$(Configuration)' == 'Debug'"
(,它似乎工作正常。仅当配置设置为调试时,才会包含 NuGet 包。是否可以根据项目名称或在共享 MSBuild 文件中定义包时,仅在某些项目中使用自定义属性或包含包?
事实证明,我的问题特定于使用分析器包。它们将应用于安装它们的项目和所有依赖项目。在将PrivateAssets="all"
添加到PackageReference
后,它开始按预期工作。