Error Compiling Autorest Generated Client

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("");

            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?

3

2 Answers

I have add only this changes and it works

<PropertyGroup>
  <IncludeGeneratorSharedCode>true</IncludeGeneratorSharedCode>
  <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(""));
}
7

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest