Breaking changes (June 2022)
Prior to June 2022, all API client libraries targeted GAX (Google.Api.Gax and related packages) version 3.x (or older).
GAX v4.0.0 was released on June 6th 2022, with various breaking changes. Most of these are theoretical breaking changes in that they won't affect most users; they're changes to API surfaces which are usually only referenced by generated code. (The generators have been changed to take this into account, of course.)
That said, there are some breaking changes to be aware of that are more likely to affect users, as described below. If you encounter an issue which isn't covered below or in the library-specific version history, please file a GitHub issue.
GAX v4 targets .NET Standard 2.1 and .NET 4.6.2. (For reference, GAX v3 supported .NET Standard 2.0 and .NET 4.6.1.)
This means that if you want to use the API libraries targeting GAX v3, you need to be using .NET Core 3.1 or .NET 4.6.2, or a higher version of either of these.
Change of gRPC default implementation
Where available, GAX v4 uses Grpc.Net.Client rather than Grpc.Core as the implementation for gRPC.
For most customers this is entirely transparent, but if you have set any environment variables that
are specific to Grpc.Core (e.g.
GRPC_PROXY), you may need to either force the use of Grpc.Core,
or make other code changes to obtain the same result. (The details will depend on exactly what
environment variables are set and why.)
For more information about the rules determining which gRPC implementation is used, see the transport selection documentation.
Obsolete members of libraries have been removed, unless they are part of the API surface the library exposes.
Some libraries (e.g. PubSub) included IAM methods directly within the client surface.
These are now exposed via a separate client, accessed via the
of the "main" API client. For example, a previous call of
should be changed to
Client implementation constructors
The client libraries for the gRPC-based APIs have always split the client classes into an abstract base class (e.g.
and a concrete derived class (e.g.
ExampleClientImpl). While most users won't need to construct
these implementation classes directly (instead using the static
ExampleClient.Create() method or
ExampleClientBuilder.Build()), they're public and have public constructors to support edge cases.
In the GAX v3 generation of libraries, the constructor signature was:
public ExampleClientImpl(Example.ExampleClient grpcClient, ExampleSettings settings)
Example.ExampleClient is the generated low-level gRPC stub.)
In GAX v4, the constructor also accepts a logger:
public ExampleClientImpl(Example.ExampleClient grpcClient, ExampleSettings settings, ILogger logger)
The logger may be null, so it's easy to change any code that called the old signature - but it's still a breaking change.