A collection of Visual Studio C# custom tool code generators for Swagger / OpenAPI specification files
- Visual Studio 2022
- Visual Studio 2017 and 2019
- Visual Studio for Mac. Follow these instructions for update convenience on Visual Studio for Mac
- Supports Visual Studio 2017, 2019, 2022, and Visual Studio for Mac
- Add New REST API Client to a project from an OpenAPI specification URL (e.g https://petstore.swagger.io/v2/swagger.json) using AutoRest, NSwag, Swagger Codegen, or OpenAPI Generator
- Define custom namespace for the generated file
- Auto-updating of generated code file when changes are made to the OpenAPI specification JSON or YAML file
- Generate code using an NSwagStudio specification file by including it in the project and using the Generate with NSwag context menu
-
AutoRestCodeGenerator - Generates a single file C# REST API Client using AutoRest. The resulting file is the equivalent of using the AutoRest CLI tool with:
--csharp --input-file=[swaggerFile] --output-file=[outputFile] --namespace=[namespace] --add-credentials
-
NSwagCodeGenerator - Generates a single file C# REST API Client using the NSwag.CodeGeneration.CSharp nuget package v13.17.0
-
SwaggerCodeGenerator - Generates a single file C# REST API Client using Swagger Codegen CLI v3.0.34. The output file is the result of merging all the files generated using the Swagger Codegen CLI tool with:
generate -l csharp --input-spec [swaggerFile] --output [output] -DapiTests=false -DmodelTests=false -DpackageName=[namespace] --skip-overwrite
-
OpenApiCodeGenerator - Generates a single file C# REST API Client using OpenAPI Generator v6.0.1. The output file is the result of merging all the files generated using the OpenAPI Generator tool with:
generate -g csharp --input-spec [swaggerFile] --output [output] -DapiTests=false -DmodelTests=false -DpackageName=[namespace] --skip-overwrite
The custom tool code generators piggy back on top of well known Open API client code generators like AutoRest, NSwag, OpenAPI Generator, and Swagger Codegen CLI. These tools require NPM and the Java Runtime Environment to be installed on the developers machine. Alternative Java SDK implementations such as the OpenJDK works fine with this extension. By default, the path to java.exe is read from the JAVA_HOME environment variable, but is also configurable in the Settings screen
The Swagger Codegen CLI and OpenAPI Generator are distributed as JAR files and are downloaded on demand but requires the Java SDK to be installed on the machine. AutoRest is installed on-demand via NPM as a global tool and uses the latest available version. This means that using these custom tools have an initial delay upon first time use.
NSwagStudio is stand alone UI tool for editing a .nswag specification file for generating code. This tool is optional to install and official installation instructions are available on the NSwag Wiki on Github. If NSwagStudio is not installed on the machine then the Visual Studio Extension will install the NSwag CLI via NPM as a global tool using the latest available version.
The OpenAPI Generator and Swagger Codegen CLI code generators produces code that depends on the RestSharp and JsonSubTypes NuGet packages
The AutoRest code generator produces code that depends on the Microsoft.Rest.ClientRuntime and Newtonsoft.Json NuGet packages
The NSwag code generator produces code that depends on the Newtonsoft.Json NuGet package
This Visual Studio Extension will automatically add the required NuGet packages that the generated code depends on
This extension will by default make some assumptions on the installation paths for Java, NSwag and NPM but also provides option pages for configuring this. The Swagger Codegen CLI and the OpenAPI Generator JAR files are by default downloaded to the user TEMP folder but it is also possible to specify to use existing JAR files
Supports customising how AutoRest generates code based on the C# generator settings that the AutoRest CLI tool provides
Supports customising how NSwag generates code using the properties exposed by the NSwag NuGet package
Supports customising how the .nswag file is generated using a subset of the options available in NSwag Studio
Supports customising how OpenAPI Generator generates code using the additional optional properties that the OpenAPI Generator CLI tool provides
This extension collects errors and tracks feature usages to a service called Exceptionless. This is done anonymously using a support key and a generated anonymous identity based on a secure hash of username@host
The Visual Studio extension can be installed directly from Visual Studio 2017 or 2019 via the Extensions Dialog Box. The process is best described in the official Microsoft documentation for Managing extensions for Visual Studio
This installation process for Visual Studio for Mac is currently a bit troublesome as the MonoDevelop Addin Repository is currently not accepting new users so I can't really register and setup my extension.
There are 2 ways of installing my extension on Visual Studio for Mac: Adding a custom extension repository or Installing the .mpack file directly from the Extensions Manager
Here's what you need to do:
- Open the Visual Studio for Mac Extension Manager
- You can do this from the menu Visual Studio -> Extentions
- Select the Gallery Tab
- Expand the Repository drop down box and select Manage Repositories
- Press on the Add button to add a new custom extension repository
- Register an online repository at https://christianhelle.com/vsmac/main.mrep
- Click OK
- Now my extension repository is added to the list
- Make sure that this is enabled (indicated by a check box)
- You should now be able to see my extensions from the Gallery tab
- By adding my extension repository you will be able to conveniently update my extension using the Visual Studio for Mac Extension Manager
Here's what you need to do:
- Download the latest .mpack file from the Latest Github Release
- Now from within Visual Studio for Mac you need to launch the Extensions Dialog Box. You can do this from the menu Visual Studio -> Extentions
- Click on the Install from File button
- Browse to the .mpack file and select it. You will be prompted with a confirmation dialog
-
Click Install and restart Visual Studio for Mac
-
To Verify that the Add-in was installed you can re-open the Extensions Dialog Box, select the Installed tab and expand the IDE Extensions. You should be able to see the REST API Client Code Generator.
-
Uninstalling the Add-in is done in this same dialog box by clicking the Uninstall button
All custom tools mentioned above are also implemented in a cross platform command line application
- .NET Core 3.1 runtime
- Java Runtime Environment
- NPM
The tool can be installed as a .NET Core global tool that you can call from the shell / command line
dotnet tool install --global rapicgen
or by following the instructions here to install a specific version of tool
Since the tool is published as a .NET Core Tool, it can be launched from anywhere using any command line interface by calling rapicgen. The help information is displayed when not specifying any arguments to rapicgen
Usage: rapicgen [command] [options]
Options:
-v|--verbose Show verbose output
-?|-h|--help Show help information.
Commands:
csharp Generate C# API client
jmeter Generate Apache JMeter test plans
openapi-generator Generate code using OpenAPI Generator.
See supported generators at https://openapi-generator.tech/docs/generators/
typescript Generate TypeScript API client
Run 'rapicgen [command] -?|-h|--help' for more information about a command.
Some help information is also provided per command and can be launched by
rapicgen [command name] -?
or
rapicgen [command name] [sub command name] -?
For example:
rapicgen csharp -?
will output this:
Generate C# API client
Usage: rapicgen csharp [command] [options]
Options:
-?|-h|--help Show help information.
Commands:
autorest Generate C# API client using AutoRest
nswag Generate C# API client using NSwag
openapi Generate C# API client using OpenAPI Generator
swagger Generate C# API client using Swagger Codegen CLI
Run 'csharp [command] -?|-h|--help' for more information about a command.
and
rapicgen csharp autorest -?
will output this:
Generate Swagger / Open API client using AutoRest
Usage: run autorest [options] <swaggerFile> <namespace> <outputFile>
Arguments:
swaggerFile Path to the Swagger / Open API specification file
namespace Default namespace to in the generated code
outputFile Output filename to write the generated code to. Default is the swaggerFile .cs
Options:
-?|-h|--help Show help information
or
rapicgen typescript -?
will output this:
Generate TypeScript API client
Usage: rapicgen typescript [options] <generator> <swaggerFile> <outputPath>
Arguments:
generator The tech stack to use for the generated client library
Allowed values are: Angular, Aurelia, Axios, Fetch, Inversify, JQuery, NestJS, Node, ReduxQuery,
Rxjs.
Default value is: Angular.
swaggerFile Path to the Swagger / Open API specification file
outputPath Output folder to write the generated code to
Default value is: typescript-generated-code.
Options:
-nl|--no-logging Disables Analytics and Error Reporting
-?|-h|--help Show help information.
Let's say we have a OpenAPI Specifications document called Swagger.json
For starters, we can use the Swagger Petstore spec. Here's an example powershell script for downloading it
Invoke-WebRequest -Uri https://petstore.swagger.io/v2/swagger.json -OutFile Swagger.json
In case you don't have the CLI tool installed you can install it by
dotnet tool install --global rapicgen
Here's an example of how to generate code using AutoRest
rapicgen csharp autorest Swagger.json GeneratedCode ./AutoRestOutput.cs
Here's an example of how to generate code using NSwag
rapicgen csharp nswag Swagger.json GeneratedCode ./NSwagOutput.cs
Here's an example of how to generate code using Swagger Codegen CLI
rapicgen csharp swagger Swagger.json GeneratedCode ./SwaggerOutput.cs
Here's an example of how to generate code using OpenAPI Generator
rapicgen csharp openapi Swagger.json GeneratedCode ./OpenApiOutput.cs
Here's an example of how to generate code JMeter test plans
rapicgen jmeter Swagger.json
Here's an example of how to generate code for TypeScript
rapicgen typescript Angular Swagger.json
For tips and tricks on software development, check out my blog
If you find this useful and feel a bit generous then feel free to buy me a coffee ☕