#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 ...