Автоматический поиск генерирует клиентский Sdk, для которого требуется бета-пакет

#azure #.net-core #nuget #azure-functions #autorest

#azure #.net-core #nuget #azure-функции #автоматический поиск

Вопрос:

Я использую Autorest для создания клиентского Sdk для функции Azure.

После этого клиентский Sdk должен быть упакован и отправлен в наш канал NuGet.

Все эти шаги будут выполнены с yaml помощью конвейера для Azure DevOps.

В последние месяцы это работает очень хорошо. Но недавно Autorest перестал работать как обычно.

К сожалению, autorest генерирует файл проекта, для которого требуется бета-пакет NuGet.

 <PackageReference Include="Microsoft.Azure.AutoRest.CSharp" Version="3.0.0-beta.20210205.2" />
 

Конечно, NuGet pack не может упаковать проект с бета-версией или предварительно выпущенными зависимостями.

  • У кого-нибудь такая же проблема с autorest?
  • Могу ли я настроить автозапуск, чтобы не использовать бета-пакеты?

Сгенерированный файл проекта выглядит следующим образом:

 <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <Nullable>annotations</Nullable>
  </PropertyGroup>

  <PropertyGroup>
    <LangVersion>8.0</LangVersion>
    <IncludeGeneratorSharedCode>true</IncludeGeneratorSharedCode>
      <RestoreAdditionalProjectSources>https://azuresdkartifacts.blob.core.windows.net/azure-sdk-tools/index.json</RestoreAdditionalProjectSources>
  </PropertyGroup>

  <ItemGroup>
      <PackageReference Include="Microsoft.Azure.AutoRest.CSharp" Version="3.0.0-beta.20210205.2" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Azure.Core" Version="1.6.0" />
  </ItemGroup>

</Project>
 

Конвейер, который генерирует, упаковывает и отправляет клиентский Sdk, выглядит следующим образом:

 steps: 
  - powershell: 'npm install -g autorest@latest'
    displayName: "Install AutoRest"
  - task: AzurePowerShell@4
    displayName: "Download Swagger"
    inputs:
      azureSubscription: ${{parameters.subscription}}
      scriptType: 'InlineScript'
      azurePowerShellVersion: 'LatestVersion'
      inline: |
        $context = New-AzApiManagementContext -ResourceGroupName "${{parameters.apimResourceGroup}}" -ServiceName "${{parameters.apim}}"  
        Export-AzApiManagementApi -Context $context -ApiId "$(appName)-development" -SpecificationFormat OpenApi -SaveAs "$(Build.ArtifactStagingDirectory)definition-$(version).yaml"
  - powershell: 'autorest --verbose --v3 --csharp --add-credentials --input-file="$(Build.ArtifactStagingDirectory)definition-$(version).yaml" --output-folder="$(Build.Repository.LocalPath)ApisrcClientSdk" --namespace="ClientSdk" --override-client-name="Client"'
    displayName: 'Run AutoRest'    
  - task: DotNetCoreCLI@2
    displayName: "Pack Projects"
    inputs:
      command: "pack"
      arguments: "--configuration $(buildConfiguration) --include-symbols"
      packagesToPack: "**/ClientSdk.csproj"
      versioningScheme: "off"
      verbosityPack: "Normal"
  - task: DotNetCoreCLI@2
    inputs:
      command: 'push'
      packagesToPush: '$(Pipeline.Workspace)/**/*.nupkg;!$(Pipeline.Workspace)/**/*.symbols.nupkg'
      nuGetFeedType: 'internal'
      publishVstsFeed: ${{parameters.nugetfeed}}
 

Задача NuGet pack завершается с ошибкой

1>C:Program Filesdotnetsdk5.0.102SdksNuGet.Build.Tasks.PackbuildNuGet.Build.Tasks.Pack.targets(207,5): error NU5104: A stable release of a package should not have a prerelease dependency. Either modify the version spec of dependency "Microsoft.Azure.AutoRest.CSharp [3.0.0-beta.20210205.2, )" or update the version field in the nuspec.

Ответ №1:

Использование пакета предварительной версии в пакете выпуска является нестабильным и опасным. Эта ошибка предназначена для предотвращения этого. Вы можете использовать несколько вариантов:

Отметьте свой пакет как предварительный выпуск

Предполагая, что ваш проект все еще находится в разработке и должен использовать эту последнюю зависимость, которая все еще находится в разработке, просто отметьте свой пакет как также находящийся в разработке. Из документов Microsoft:

Если ваш проект использует PackageReference: включите семантический суффикс версии в элемент PackageVersion файла .csproj:

 <PropertyGroup>
    <PackageVersion>1.0.1-alpha</PackageVersion>
</PropertyGroup>
 

Если в вашем проекте есть файл packages.config: включите семантический
суффикс версии в элемент версии файла .nuspec:

 <version>1.0.1-alpha</version>
 

Используйте последнюю стабильную сборку

Вернитесь к последней версии ваших зависимостей, в которых используются пакеты выпуска. Как правило, это безопаснее, поскольку зависимости в процессе разработки могут создавать серьезные проблемы, которые пока неизвестны. Если бы разработчики проекта считали, что их проект безопасен для производственного использования, они бы отметили его как таковой.

Комментарии:

1. Autorest — это инструмент для создания Sdk на основе OpenAPI / Swagger. Я не хочу использовать бета-версии или предварительные пакеты, но autorest генерирует проект, которому нужен этот бета-пакет.

2. В вашем вопросе указано, что он ранее работал. Поэтому используйте версию Autorest, в которой ранее не использовались бета-пакеты. Как правило, полезно указывать конкретные версии всех ваших зависимостей, а не последнюю по умолчанию, чтобы не возникало критических изменений, подобных этому.

3. добавление определенной версии работает: autorest --version=3.0.6336 ...