首页 > 解决方案 > 根据 buildConfiguration 选择不同的 nuget 包

问题描述

我有一个内部框架,我为不同版本的外部系统构建了两个不同的版本。

我构建了它并将它们作为“Framework-Ver1”和“Framework-Ver2”发布到 NuGet 提要。

在我使用此框架的应用程序中,我已将其添加到 csproj。

  <Choose>
    <When Condition="'$(Configuration)' == 'Release_Ver2' Or '$(Configuration)' == 'Debug'">
      <ItemGroup>
        <PackageReference Include="Framework.Ver2" />
      </ItemGroup>
    </When>
    <When Condition="'$(Configuration)' == 'Release_Ver1'">
      <ItemGroup>
        <PackageReference Include="Framework.Ver1" />
      </ItemGroup>
    </When>
  </Choose>

这在 Visual Studio 中运行良好。

在 Azure Devops 上,虽然我总是得到 Framework.Ver2。

当我检查它时,DevOps yaml 看起来像这样

  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release_Ver1'

- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '$(solution)'
    configuration: '$(buildConfiguration)'
    feedsToUse: 'select'
    vstsFeed: 'GUID'

但是,根据文档,restore 命令不使用配置。

如果我更改 csproj 中的“默认”,它会更改它使用的内容,但对于两个管道。这确认没有 buildConfiguration 发送到 fetch 过程中。

 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

改为

 <Configuration Condition=" '$(Configuration)' == '' ">Release_Ver1</Configuration>

编辑:这最后一块给了我一个想法,使用默认环境变量...... ^^

标签: visual-studioazure-devopsnugetnuget-package-restore

解决方案


更改 csproj 中的默认设置方式解决了该问题。

在 csproj 的开头,我添加了:

<Configuration Condition=" '$(Configuration)' == '' ">$(buildConfiguration)</Configuration>

而且由于 yaml 有:

buildConfiguration: 'Release_Ver1'

在 NuGet 还原期间使用它。


推荐阅读