根据 MSBuild 文件中的自定义属性值排除 NuGet 包



我正在构建一个 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.AnalyzersNuGet 包,但似乎该条件被忽略了,因为所有项目都包含该包。该条件在LangVersion上工作正常,我已经验证了项目是使用预期的/langversioncsc 参数编译的。

我尝试使用内置属性值(Condition="'$(Configuration)' == 'Debug'"(,它似乎工作正常。仅当配置设置为调试时,才会包含 NuGet 包。是否可以根据项目名称或在共享 MSBuild 文件中定义包时,仅在某些项目中使用自定义属性或包含包?

事实证明,我的问题特定于使用分析器包。它们将应用于安装它们的项目和所有依赖项目。在将PrivateAssets="all"添加到PackageReference后,它开始按预期工作。

相关内容

  • 没有找到相关文章

最新更新