Skip to content

Autorest generates C# Client Sdk that needs a beta package #1013

@DerDani2081

Description

@DerDani2081

Unfortunately autorest generates a project file that needs a beta nuGet package.

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

Of course, nuGet pack is not able to pack a project with beta or pre-release dependencies.

I use the latest version of autorest and this cli command:
'autorest --verbose --v3 --csharp --add-credentials --input-file="$(Build.ArtifactStagingDirectory)\definition-$(version).yaml" --output-folder="$(Build.Repository.LocalPath)\Api\src\ClientSdk" --namespace="ClientSdk" --override-client-name="Client"'

The generated project file looks like this:

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

The Pipeline that generates, packs and push the Client Sdk looks like that:

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)\Api\src\ClientSdk" --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}}

Of course, the nuGet pack task failes with this error

1>C:\Program Files\dotnet\sdk\5.0.102\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.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.

Expected Behavior

Autorest only uses stable packages version, so we can pack and push the generated Client Sdk.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue requires a change to an existing behavior in the product in order to be resolved.v3Version 3 of AutoRest C# generator.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions