7

After autogenerating client using Swagger OpenApi 3.0 spec, I'm unable to compile the generated client. I get error on objects ClientDiagnostics, RawRequestUriBuilder, Utf8JsonRequestContent.

RestClient.cs

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Azure;
using Azure.Core;
using Azure.Core.Pipeline;
using Planner.Client.Models;

namespace Planner.Client
{
    internal partial class RestClient
    {
        private Uri endpoint;
        private ClientDiagnostics _clientDiagnostics;
        private HttpPipeline _pipeline;

        /// <summary> Initializes a new instance of RestClient. </summary>
        /// <param name="clientDiagnostics"> The handler for diagnostic messaging in the client. </param>
        /// <param name="pipeline"> The HTTP pipeline for sending and receiving REST requests and responses. </param>
        /// <param name="endpoint"> server parameter. </param>
        public RestClient(ClientDiagnostics clientDiagnostics, HttpPipeline pipeline, Uri endpoint = null)
        {
            endpoint ??= new Uri("https://localhost:49157");

            this.endpoint = endpoint;
            _clientDiagnostics = clientDiagnostics;
            _pipeline = pipeline;
        }


        internal HttpMessage CreateCreateDataRequest(IEnumerable<DataCreateModel> body)
        {
            var message = _pipeline.CreateMessage();
            var request = message.Request;
            request.Method = RequestMethod.Post;
            var uri = new RawRequestUriBuilder();
            uri.Reset(endpoint);
            uri.AppendPath("/api/Budget/CreateData", false);
            request.Uri = uri;
            if (body != null)
            {
                request.Headers.Add("Content-Type", "application/json");
                var content = new Utf8JsonRequestContent();
                content.JsonWriter.WriteStartArray();
                foreach (var item in body)
                {
                    content.JsonWriter.WriteObjectValue(item);
                }
                content.JsonWriter.WriteEndArray();
                request.Content = content;
            }
            return message;
        }
    }
}

Also, getting error in below autogenerated serialization class on IUtf8JsonSerializable and Optional.

DataCreateModel.Serialization.cs

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

// <auto-generated/>

#nullable disable

using System.Text.Json;
using Azure.Core;

namespace Planner.Client.Models
{
    public partial class DataCreateModel : IUtf8JsonSerializable
    {
        void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)
        {
            writer.WriteStartObject();
            if (Optional.IsDefined(ProjectCode))
            {
                if (ProjectCode != null)
                {
                    writer.WritePropertyName("projectCode");
                    writer.WriteStringValue(ProjectCode);
                }
                else
                {
                    writer.WriteNull("projectCode");
                }
            }
            if (Optional.IsDefined(TeamCode))
            {
                if (TeamCode != null)
                {
                    writer.WritePropertyName("teamCode");
                    writer.WriteStringValue(TeamCode);
                }
                else
                {
                    writer.WriteNull("teamCode");
                }
            }
            if (Optional.IsDefined(YearMonth))
            {
                writer.WritePropertyName("yearMonth");
                writer.WriteNumberValue(YearMonth.Value);
            }
            if (Optional.IsDefined(Hours))
            {
                writer.WritePropertyName("hours");
                writer.WriteNumberValue(Hours.Value);
            }
            writer.WriteEndObject();
        }
    }
}

This project using .net 5, autorest v3.1.0, cli v3.1.2 and node v14.15.5.

What am I missing?

user15343622
  • 73
  • 1
  • 3
  • Whenever you report that you get an error, please be specific about *exactly what that error is*. – Jon Skeet Mar 12 '21 at 16:29
  • Sorry, I assumed it would be clear the error was on the objects I had in bold. I should have been more explicit. The error was Object not found during compilation. – user15343622 Mar 15 '21 at 23:07
  • "Object not found" - or the specific classes not being found? It would be so much clearer if you'd just copy/paste the error messages directly into the question. – Jon Skeet Mar 16 '21 at 06:43

2 Answers2

9

I have add only this changes and it works

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

<ItemGroup>
  <PackageReference Include="Azure.Core" Version="1.10.0" />
  <PackageReference Include="Microsoft.Azure.AutoRest.CSharp" Version="3.0.0-beta.20210311.1" PrivateAssets="All" />
</ItemGroup>

For the client creation i use this

class MyClientOptions : ClientOptions
{
}

static void Main(string[] args)
{
    var client = new TestRestClient(
        new ClientDiagnostics(new MyClientOptions()),
        new HttpPipeline(HttpClientTransport.Shared),
        new Uri("https://api.domain.com"));
}
live2
  • 3,771
  • 2
  • 37
  • 46
  • 1
    Thank you! Adding reference to Microsoft.Azure.AutoRest.CSharp worked for me. – user15343622 Mar 15 '21 at 23:05
  • What's the nuget package source? I'm getting "Unable to find package Microsoft.Azure.AutoRest.CSharp. No packages exist with this id in source(s): DevExpress nuget.org" Is it no longer beta and been renamed? – CraPo Mar 22 '21 at 11:07
  • 2
    Ah, I think the https://azuresdkartifacts.blob.core.windows.net/azure-sdk-tools/index.json in the propertygroup in Anton's answer is what provides it – CraPo Mar 22 '21 at 11:20
  • Great answer! This was really blocking me and now it's working great. – ScottyMacDev Apr 28 '21 at 21:35
  • If only this would have been explained in the Autorest docs... I have not found anything :( – Kzryzstof Dec 01 '21 at 12:48
  • I tried the above suggestions and I could still see some other new issues in my project in auto generated code as follows: It is creating duplicate switch cases for success response and it is trying to set response as nullable bool for 500 errors whereas the actual method has bool return type. So, the reason behind that is the Microsoft.Azure.AutoRest.CSharp package is not fully released yet. I don't personally recommend to go with --v3 flag to generate client code for real projects. For now, I am going with --version=3.0.6274 for generating client and it is working for me without any issues. – Viswa Dec 22 '21 at 07:37
  • The URL in `RestoreAdditionalProjectSources` changed to https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-net/nuget/v3/index.json and also the versions are higher. autorest (now?) generates a project file as well - look up the values there. – Heinrich Ulbricht Jun 07 '22 at 19:51
6

It seems new autorest requires some changes in csproj.

For my case, I had to change it to

<PropertyGroup>
  <TargetFramework>netstandard2.0</TargetFramework>
  <Nullable>annotations</Nullable>
  <IncludeGeneratorSharedCode>true</IncludeGeneratorSharedCode>
  <RestoreAdditionalProjectSources>https://azuresdkartifacts.blob.core.windows.net/azure-sdk-tools/index.json</RestoreAdditionalProjectSources>
  <LangVersion>8</LangVersion>
</PropertyGroup>
  
<ItemGroup>
  <PackageReference Include="Azure.Core" Version="1.10.0" />
  <PackageReference Include="Microsoft.Azure.AutoRest.CSharp" Version="3.0.0-beta.20210311.1" PrivateAssets="All" />
</ItemGroup>
Ramil Aliyev 007
  • 4,437
  • 2
  • 31
  • 47