-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Deprected: Do not use T4 but use the CommandLine
The following code snippets show how to automatically generate the client code with a T4 template in Visual Studio.
Important: The sample code is outdated and must be updated!
Note: If you use ReSharper, you should check out ForTea for enhanced Visual Studio T4 editing support.
For a complete T4 template which generates client code, choose two snippets from this page: One to load the Swagger specification (for example from a Swagger file or a Web API assembly) and one to transform the read Swagger specification into code.
Note: Project may need to be built at least once after adding nuget package in order for the assemblies to be available in the output directory
The following code loads an ASP.NET Web API assembly and generates the client for a configured Web API controller class.
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Runtime" #>
<#@ assembly name="$(TargetDir)\NJsonSchema.dll" #>
<#@ assembly name="$(TargetDir)\NJsonSchema.CodeGeneration.dll" #>
<#@ assembly name="$(TargetDir)\NSwag.Core.dll" #>
<#@ assembly name="$(TargetDir)\NSwag.CodeGeneration.dll" #>
<#@ assembly name="$(TargetDir)\NSwag.AssemblyLoader.dll" #>
<#@ import namespace="NSwag.CodeGeneration" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="Microsoft.CSharp" #>
<#@ output extension=".ts" #>
<#
// CONFIGURATION
var assemblyPath = @"../../bin/NSwag.Demo.Web.dll";
var controllerClass = "NSwag.Demo.Web.Controllers.PersonsController";
var defaultUrlTemplate = "api/{controller}/{action}/{id}";
// -------------
var generator = new WebApiAssemblyToSwaggerGenerator(new WebApiAssemblyToSwaggerGeneratorSettings
{
AssemblyPath = Path.GetFullPath(Path.GetDirectoryName(Host.TemplateFile) + assemblyPath),
DefaultUrlTemplate = defaultUrlTemplate
});
var document = generator.GenerateForSingleController(controllerClass);
// TODO: Add client code generation (see below)
#>
<#= code #>
After the client code is generated the given .NET DLL file is unloaded.
To generate the client code from the Swagger specification which is stored in a file in your project, use the following code in your T4 file:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Runtime" #>
<#@ assembly name="$(TargetDir)\NJsonSchema.dll" #>
<#@ assembly name="$(TargetDir)\NJsonSchema.CodeGeneration.dll" #>
<#@ assembly name="$(TargetDir)\NSwag.Core.dll" #>
<#@ assembly name="$(TargetDir)\NSwag.CodeGeneration.dll" #>
<#@ import namespace="NSwag" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft.CSharp" #>
<#@ output extension=".ts" #>
<#
// CONFIGURATION
var filePath = @"../../ServiceDefinitions/MyService.swagger";
// -------------
var fullFilePath = Path.GetFullPath(Path.GetDirectoryName(Host.TemplateFile) + filePath);
var document = SwaggerDocument.FromJsonAsync(File.ReadAllText(fullFilePath)).GetAwaiter().GetResult();;
// TODO: Add client code generation (see below)
#>
<#= code #>
Only the path to the Swagger specification file is required.
To generate the client code from the Swagger specification from a remote server, use the following code in your T4 file:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Runtime" #>
<#@ assembly name="$(TargetDir)\NJsonSchema.dll" #>
<#@ assembly name="$(TargetDir)\NJsonSchema.CodeGeneration.dll" #>
<#@ assembly name="$(TargetDir)\NSwag.Core.dll" #>
<#@ assembly name="$(TargetDir)\NSwag.CodeGeneration.dll" #>
<#@ import namespace="NSwag" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="Microsoft.CSharp" #>
<#@ output extension=".ts" #>
<#
// CONFIGURATION
var url = @"http://localhost:22093/api/Persons/Swagger";
// -------------
var document = SwaggerDocument.FromUrlAsync(url).GetAwaiter().GetResult();
// TODO: Add client code generation (see below)
#>
<#= code #>
Only the URL to where the Swagger specification is served is required.
Required assemblies:
<#@ assembly name="$(TargetDir)\NJsonSchema.CodeGeneration.TypeScript.dll" #>
Required namespaces:
<#@ import namespace="NSwag.CodeGeneration.CodeGenerators.TypeScript" #>
Required code:
var provider = new CSharpCodeProvider();
var clientGenerator = new TypeScriptClientGenerator(document, new TypeScriptClientGeneratorSettings
{
ClassName = provider.CreateEscapedIdentifier(Path.GetFileNameWithoutExtension(Host.TemplateFile))
});
var code = clientGenerator.GenerateFile();
Required assemblies:
<#@ assembly name="$(TargetDir)\NJsonSchema.CodeGeneration.CSharp.dll" #>
Required namespaces:
<#@ import namespace="NSwag.CodeGeneration.CodeGenerators.CSharp" #>
Update output extension:
<#@ output extension=".cs" #>
Required code:
var provider = new CSharpCodeProvider();
var settings = new CSharpClientGeneratorSettings
{
ClassName = provider.CreateEscapedIdentifier(Path.GetFileNameWithoutExtension(Host.TemplateFile)),
};
settings.CSharpGeneratorSettings.Namespace = Host.ResolveParameterValue("directiveId", "namespaceDirectiveProcessor", "namespaceHint");
var clientGenerator = new CSharpClientGenerator(document, settings);
var code = clientGenerator.GenerateFile();