Azure DevOps - восстановление условного пакета - PullRequest
1 голос
/ 26 сентября 2019

Решение, построенное с помощью конвейера 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задание не соответствует условному выбору пакета.(восстанавливает Mock.MyPackage)
Вопрос:
как я могу условно восстановить пакеты (на основе конфигурации $)?

Примечания:
Я также пытался восстановить во время задачи Visual Studio Build, указав аргумент MsBuild: /t:restore.
. В этом случае произошел сбой с сообщением: Не удалось получить информацию о XX из удаленного источника. Если эта команда может восстанавливать пакеты, как я могу указать аргументы авторизации для частного канала?

Существует проблема на Github: https://github.com/NuGet/Home/issues/5895, где такая проблема упоминается в конце.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

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

enter image description here

Примечание: мы могли бысохраните аргументы авторизации для частного канала в файле nuget.config.

Как тест, он отлично работает на моей стороне с Devops.

Надеюсь, это поможет.

0 голосов
/ 28 сентября 2019

Я хотел внести минимальные изменения в конфигурацию развертывания, поэтому допустимо следующее:

  1. Создается пустой проект, и все пакеты, которые восстанавливаются условно, указываются там (без каких-либо условий).

  2. Добавлен дополнительный аргумент к задаче msbuild: '/ t: restore'

Во время сборки произойдет следующее: 'dotnet restore' будетвосстановить все пакеты благодаря 1).
Поскольку он не знает выбранную конфигурацию, он может выбрать неправильный пакет (Mock.MyPackage вместо MyPackage).Вот где 2), где задача msbuild восстановит пакеты из локального кэша, созданного с помощью 'dotnet restore'.

Примечания: Как писал @ (Leo Liu-MSFT), dotnet restore может аутентифицироваться, но незнает конфигурацию, а msbuild знает конфигурацию, но не может аутентифицироваться, поэтому восстановление пакетов в AzDevOps из частных каналов довольно сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...