4

通过 Azure DevOps 管道构建的解决方案有一些使用条件包引用的项目,例如:

<Choose>
    <When Condition="'$(Configuration)'=='Debug'">
      <ItemGroup>
         <PackageReference Include="Mock.MyPackage" Version="1.0.0" />
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
         <PackageReference Include="MyPackage" Version="1.2.0" />
      </ItemGroup>
    </Otherwise>
</Choose>

包源是私有 NuGet 源。

dotnet restore 任务不遵守条件包选择。(它恢复 Mock.MyPackage)
问题:
如何有条件地恢复包(基于 $Configuration)?

备注:
我还尝试在 Visual Studio Build 任务期间通过指定 MsBuild 参数进行恢复:/t:restore。
在这种情况下,它会失败并显示一条消息:无法从远程源检索有关 XX 的信息。如果此命令可以恢复包,我如何为私人提要指定授权参数?

Github 上有一个问题:https ://github.com/NuGet/Home/issues/5895最后提到了这样的问题。

4

3 回答 3

1

Azure DevOps - 有条件的包还原

此问题应与您指定的要求和当前Visual Studio Build task/的限制有关dotnet restore

正如您测试的那样,如果我们使用restore task,我们无法在此任务中指定配置参数。由于没有这样的选项来接收恢复任务的配置参数。这就是为什么它总是恢复默认包的原因Mock.MyPackage

如果您使用Visual Studio build task,我们无法为私人提要指定授权参数。

为解决此问题,我使用命令行 V1 任务调用 MSBuild 以使用以下 MSBuild 参数恢复和构建项目:

-t:restore;build "CoreConditionRestore/CoreConditionRestore/CoreConditionRestore.csproj" -p:RestoreSources="<MyFeed>/v3/index.json" -p:RestoreConfigFile="<MyNugetConfigPath>\nuget.config" /p:Configuration=Debug

在此处输入图像描述

注意:我们可以将私有提要的授权参数保存在nuget.config文件中。

作为测试,它在我这边与 Devops 一起工作得很好。

希望这可以帮助。

于 2019-09-27T08:41:11.503 回答
0

我希望部署配置的变化最小,所以以下是可以接受的。

  1. 创建一个空项目,并在此处引用所有有条件恢复的包(没有任何条件)。

  2. 添加了 msbuild 任务的附加参数:'/t:restore'

在构建期间将发生以下情况:“dotnet restore”将恢复所有包,这要归功于 1)。
由于它不知道选定的配置,它可能会选择错误的包(Mock.MyPackage 而不是 MyPackage)。这就是 2) 出现的地方,msbuild 任务将从“dotnet restore”创建的本地缓存中恢复包。

备注:正如@(Leo Liu-MSFT) 所写,dotnet restore 可以认证但它不知道配置,msbuild 知道配置但它不能认证,因此从私有提要在 AzDevOps 中恢复包是棘手的。

于 2019-09-28T18:29:24.347 回答
0

一个更简单的答案是在 管道变量中添加NUGET_RESTORE_MSBUILD_ARGS一个值。/p:Configuration=$(BuildConfiguration)这实际上只是将您的构建配置传递给 NuGet 还原任务。

这是非常糟糕的记录,它需要搜索 github 错误请求才能找到它

环境变量文档: https ://docs.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-environment-variables

我在 Github 问题上找到了这个: https ://github.com/NuGet/Home/issues/7575

不知道为什么默认情况下也没有启用它。

于 2021-08-30T15:35:54.763 回答