【问题标题】:Exclude NuGet package based on custom property value in MSBuild file根据 MSBuild 文件中的自定义属性值排除 NuGet 包
【发布时间】:2020-05-05 21:53:14
【问题描述】:

我正在构建一个 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 NuGet 包包含在 IsRelevantProject 属性设置为 false 的项目中,但似乎该条件已被忽略,因为所有项目都包含该包。该条件在LangVersion 上运行良好,我已经验证项目是使用预期的/langversion csc 参数编译的。

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

【问题讨论】:

  • 要继续调查,将构建输出日志设置为最详细并盯着输出...这很痛苦,但至少可以让您了解实际发生的情况。您可能希望在最小的示例项目上执行此操作,或者至少在查看详细日志时禁用并行构建。

标签: c# .net .net-core msbuild csproj


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多