基于MSBuild文件中的自定义属性值排除NuGet程序包

问题描述 投票:1回答:1

我正在构建一个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文件中对其进行定义时,才能仅在某些项目中使用自定义属性或包括程序包?

c# .net .net-core msbuild csproj
1个回答
0
投票

事实证明,我的问题仅与使用Analyzer软件包有关。他们将应用于已安装的项目以及所有相关项目。将PrivateAssets="all"添加到PackageReference后,它按预期开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.