我正在构建一个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>
我试图仅在将Microsoft.VisualStudio.Threading.Analyzers
属性设置为false的项目中包括IsRelevantProject
NuGet程序包,但由于所有项目都包含了程序包,因此似乎该条件被忽略了。该条件在LangVersion
上运行良好,我已经验证了项目是使用预期的/langversion
csc参数编译的。
我尝试使用内置属性值(Condition="'$(Configuration)' == 'Debug'"
),它似乎工作正常。仅当配置设置为调试时,NuGet软件包才会包含在内。是否只能基于项目名称或在共享MSBuild文件中对其进行定义时,才能仅在某些项目中使用自定义属性或包括程序包?
事实证明,我的问题仅与使用Analyzer软件包有关。他们将应用于已安装的项目以及所有相关项目。将PrivateAssets="all"
添加到PackageReference
后,它按预期开始工作。