diff --git a/build/Build.cs b/build/Build.cs index d3898d1a8a..bb9409b01a 100644 --- a/build/Build.cs +++ b/build/Build.cs @@ -1,28 +1,3 @@ -using System; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using System.Xml.Linq; -using Microsoft.Build.Evaluation; -using Microsoft.Build.Locator; -using Nuke.Common; -using Nuke.Common.Git; -using Nuke.Common.IO; -using Nuke.Common.ProjectModel; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.MSBuild; -using Nuke.Common.Tools.Npm; -using Nuke.Common.Tools.VSTest; -using Nuke.Common.Utilities.Collections; - -using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.Tooling.ProcessTasks; -using static Nuke.Common.Tools.Chocolatey.ChocolateyTasks; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.MSBuild.MSBuildTasks; -using static Nuke.Common.Tools.Npm.NpmTasks; -using static Nuke.Common.Tools.VSTest.VSTestTasks; using Project = Nuke.Common.ProjectModel.Project; partial class Build : NukeBuild @@ -103,7 +78,7 @@ protected override void OnBuildInitialized() Serilog.Log.Information("BUILD SETUP"); Serilog.Log.Information("Configuration:\t{Configuration}", Configuration); Serilog.Log.Information("Version prefix:\t{VersionPrefix}", VersionPrefix); - Serilog.Log.Information("Version suffix:\t{VersionSuffix}",VersionSuffix); + Serilog.Log.Information("Version suffix:\t{VersionSuffix}", VersionSuffix); Serilog.Log.Information("Tagged build:\t{IsTaggedBuild}", IsTaggedBuild); } @@ -352,9 +327,9 @@ void PublishConsoleProject(Nuke.Common.ProjectModel.Project project, string[] ta } } - PublishConsoleProject(consoleX86Project, new[] { "net461" }); - PublishConsoleProject(consoleProject, new[] { "net461" }); - PublishConsoleProject(consoleCoreProject, new[] { "netcoreapp2.1", "netcoreapp3.1", "net5.0", "net6.0", "net7.0" }); + PublishConsoleProject(consoleX86Project, new[] { "net462" }); + PublishConsoleProject(consoleProject, new[] { "net462" }); + PublishConsoleProject(consoleCoreProject, new[] { "netcoreapp3.1", "net5.0", "net6.0", "net7.0" }); void CopyConsoleBinaries(AbsolutePath target) { @@ -366,7 +341,6 @@ void CopyConsoleBinaries(AbsolutePath target) CopyDirectoryRecursively(consoleProject.Directory / "bin" / Configuration / "net461" / "publish", target / "Win", DirectoryExistsPolicy.Merge); var consoleCoreDirectory = consoleCoreProject.Directory / "bin" / Configuration; - CopyDirectoryRecursively(consoleCoreDirectory / "netcoreapp2.1" / "publish", target / "NetCore21"); CopyDirectoryRecursively(consoleCoreDirectory / "netcoreapp3.1" / "publish", target / "NetCore31"); CopyDirectoryRecursively(consoleCoreDirectory / "net5.0" / "publish", target / "Net50"); CopyDirectoryRecursively(consoleCoreDirectory / "net6.0" / "publish", target / "Net60"); diff --git a/src/NSwag.Annotations/NSwag.Annotations.csproj b/src/NSwag.Annotations/NSwag.Annotations.csproj index 460c52189d..db545a323b 100644 --- a/src/NSwag.Annotations/NSwag.Annotations.csproj +++ b/src/NSwag.Annotations/NSwag.Annotations.csproj @@ -1,11 +1,11 @@  - netstandard1.0;net45;netstandard2.0 + netstandard1.0;net462;netstandard2.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - + \ No newline at end of file diff --git a/src/NSwag.AspNet.Owin/NSwag.AspNet.Owin.csproj b/src/NSwag.AspNet.Owin/NSwag.AspNet.Owin.csproj index 01b044f785..73de7df1b7 100644 --- a/src/NSwag.AspNet.Owin/NSwag.AspNet.Owin.csproj +++ b/src/NSwag.AspNet.Owin/NSwag.AspNet.Owin.csproj @@ -1,6 +1,6 @@  - net45 + net462 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml @@ -17,11 +17,11 @@ - - TRACE;DEBUG;AspNetOwin;NET45 + + TRACE;DEBUG;AspNetOwin;NET462 - - TRACE;RELEASE;AspNetOwin;NET45 + + TRACE;RELEASE;AspNetOwin;NET462 diff --git a/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj b/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj index 0b65528421..83b2a195f9 100644 --- a/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj +++ b/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj @@ -1,12 +1,12 @@  - net45 + net462 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - - TRACE;DEBUG;NET45 + + TRACE;DEBUG;NET462 diff --git a/src/NSwag.AspNetCore.Launcher.x86/NSwag.AspNetCore.Launcher.x86.csproj b/src/NSwag.AspNetCore.Launcher.x86/NSwag.AspNetCore.Launcher.x86.csproj index bfe33ec8e8..2909459193 100644 --- a/src/NSwag.AspNetCore.Launcher.x86/NSwag.AspNetCore.Launcher.x86.csproj +++ b/src/NSwag.AspNetCore.Launcher.x86/NSwag.AspNetCore.Launcher.x86.csproj @@ -1,6 +1,6 @@  - net461 + net462 x86 Exe false diff --git a/src/NSwag.AspNetCore.Launcher/NSwag.AspNetCore.Launcher.csproj b/src/NSwag.AspNetCore.Launcher/NSwag.AspNetCore.Launcher.csproj index b744ad5f09..6e35fa8d45 100644 --- a/src/NSwag.AspNetCore.Launcher/NSwag.AspNetCore.Launcher.csproj +++ b/src/NSwag.AspNetCore.Launcher/NSwag.AspNetCore.Launcher.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1;net461 - x64 + netcoreapp3.1;net462 + x64 Exe false diff --git a/src/NSwag.AspNetCore/NSwag.AspNetCore.csproj b/src/NSwag.AspNetCore/NSwag.AspNetCore.csproj index e807a52221..7a738c4893 100644 --- a/src/NSwag.AspNetCore/NSwag.AspNetCore.csproj +++ b/src/NSwag.AspNetCore/NSwag.AspNetCore.csproj @@ -1,6 +1,6 @@  - net461;netstandard1.6;netstandard2.0;netcoreapp3.1;net5.0;net6.0;net7.0 + net462;netstandard1.6;netstandard2.0;net6.0;net7.0 Swagger Documentation AspNetCore NetCore TypeScript CodeGen $(MSBuildProjectName).nuspec symbols.nupkg @@ -30,7 +30,7 @@ - + @@ -40,17 +40,13 @@ - + - - - - diff --git a/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj b/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj index a9bed4490e..8ee7be9e12 100644 --- a/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj +++ b/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj @@ -1,6 +1,6 @@  - netcoreapp2.1;net461 + net462;net6.0 false diff --git a/src/NSwag.AssemblyLoader/AppDomainIsolation.cs b/src/NSwag.AssemblyLoader/AppDomainIsolation.cs index d153727391..f9585dbf45 100644 --- a/src/NSwag.AssemblyLoader/AppDomainIsolation.cs +++ b/src/NSwag.AssemblyLoader/AppDomainIsolation.cs @@ -22,7 +22,7 @@ namespace NSwag.AssemblyLoader public sealed class AppDomainIsolation : IDisposable where T : AssemblyLoader { /// is . - public AppDomainIsolation(string assemblyDirectory, string assemblyConfiguration, IEnumerable bindingRedirects, IEnumerable preloadedAssemblies) + public AppDomainIsolation(string assemblyDirectory, string assemblyConfiguration, IEnumerable bindingRedirects, IEnumerable preloadedAssemblies) { if (string.IsNullOrEmpty(assemblyDirectory)) { @@ -40,7 +40,7 @@ public AppDomainIsolation(string assemblyDirectory, string assemblyConfiguration foreach (var pa in preloadedAssemblies) { - Domain.Load(new AssemblyName { CodeBase = pa }); + Domain.Load(new AssemblyName { CodeBase = pa.EscapedCodeBase }); } var type = typeof(T); @@ -70,7 +70,7 @@ public void Dispose() #else - public sealed class AppDomainIsolation : IDisposable where T : AssemblyLoader, new() + public sealed class AppDomainIsolation : IDisposable where T : AssemblyLoader, new() { /// is . public AppDomainIsolation(string assemblyDirectory, string assemblyConfiguration, IEnumerable bindingRedirects, IEnumerable preloadedAssemblies) diff --git a/src/NSwag.AssemblyLoader/NSwag.AssemblyLoader.csproj b/src/NSwag.AssemblyLoader/NSwag.AssemblyLoader.csproj index b2aad3112a..5b56f265bb 100644 --- a/src/NSwag.AssemblyLoader/NSwag.AssemblyLoader.csproj +++ b/src/NSwag.AssemblyLoader/NSwag.AssemblyLoader.csproj @@ -1,6 +1,6 @@  - netstandard1.6;net461;netstandard2.0 + netstandard1.6;net462;netstandard2.0 $(NoWarn),1591 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs index fe1670e3c2..36cd579085 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs @@ -1,4 +1,9 @@ +#if NETFRAMEWORK +using System.Web.Mvc; +using System.Web.Http; +#else using Microsoft.AspNetCore.Mvc; +#endif using NSwag.CodeGeneration.OperationNameGenerators; using NSwag.Generation.WebApi; using System.ComponentModel.DataAnnotations; @@ -102,13 +107,13 @@ private static async Task GenerateCode(bool allowNullable public class TestController : Controller { - [Route("Foo")] + [Microsoft.AspNetCore.Mvc.Route("Foo")] public string Foo([FromBody][Required] T requiredBody) { return string.Empty; } - [Route("Bar")] + [Microsoft.AspNetCore.Mvc.Route("Bar")] public void Bar([FromBody] T notRequiredBody) { } diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs index ffa9d79935..72ed446e29 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs @@ -1,5 +1,9 @@ -using System.Threading.Tasks; +#if NETFRAMEWORK +using System.Web.Mvc; +#else using Microsoft.AspNetCore.Mvc; +#endif +using System.Threading.Tasks; using NSwag.Generation.WebApi; using Xunit; diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs index 608baca8ee..7f5e669294 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs @@ -1,7 +1,11 @@ -using System; +#if NETFRAMEWORK +using System.Web.Mvc; +#else +using Microsoft.AspNetCore.Mvc; +#endif +using System; using System.Net.Http; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -11,7 +15,7 @@ public class FileDownloadTests { public class FileDownloadController : Controller { - [Route("DownloadFile")] + [Microsoft.AspNetCore.Mvc.Route("DownloadFile")] public HttpResponseMessage DownloadFile() { throw new NotImplementedException(); diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs index 6468d6690e..e3841e236a 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs @@ -1,7 +1,11 @@ -using System; +#if NETFRAMEWORK +using System.Web.Mvc; +#else +using Microsoft.AspNetCore.Mvc; +#endif +using System; using System.Net.Http; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -11,7 +15,7 @@ public class FileTests { public class FileDownloadController : Controller { - [Route("DownloadFile")] + [Microsoft.AspNetCore.Mvc.Route("DownloadFile")] public HttpResponseMessage DownloadFile() { throw new NotImplementedException(); diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs index 009bbc83a2..5cbd16ef06 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs @@ -1,5 +1,10 @@ -using System.Threading.Tasks; +#if NETFRAMEWORK +using System.Web.Mvc; +using System.Web.Http; +#else using Microsoft.AspNetCore.Mvc; +#endif +using System.Threading.Tasks; using NJsonSchema; using NSwag.Generation.WebApi; using Xunit; diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs index cc1fe9786e..e7a0e02163 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs @@ -1,5 +1,9 @@ -using System.Threading.Tasks; +#if NETFRAMEWORK +using System.Web.Mvc; +#else using Microsoft.AspNetCore.Mvc; +#endif +using System.Threading.Tasks; using NSwag.Generation.WebApi; using Xunit; diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/NSwag.CodeGeneration.CSharp.Tests.csproj b/src/NSwag.CodeGeneration.CSharp.Tests/NSwag.CodeGeneration.CSharp.Tests.csproj index 720d329731..35b449c8d0 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/NSwag.CodeGeneration.CSharp.Tests.csproj +++ b/src/NSwag.CodeGeneration.CSharp.Tests/NSwag.CodeGeneration.CSharp.Tests.csproj @@ -1,13 +1,14 @@  - netcoreapp2.1 + net462;net6.0 - + + @@ -16,4 +17,11 @@ + + + + + + + diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs index bbf8622c7a..4f2eb881f7 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs @@ -1,7 +1,11 @@ -using System; +#if NETFRAMEWORK +using System.Web.Mvc; +#else +using Microsoft.AspNetCore.Mvc; +#endif +using System; using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -11,17 +15,17 @@ public class OptionalParameterTests { public class TestController : Controller { - [Route("Test")] + [Microsoft.AspNetCore.Mvc.Route("Test")] public void Test(string a, string b, string c = null) { } - [Route("TestWithClass")] + [Microsoft.AspNetCore.Mvc.Route("TestWithClass")] public void TestWithClass([FromUri] MyClass objet) { } - [Route("TestWithEnum")] + [Microsoft.AspNetCore.Mvc.Route("TestWithEnum")] public void TestWithEnum([FromUri] MyEnum? myEnum = null) { } diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/Properties/launchSettings.json b/src/NSwag.CodeGeneration.CSharp.Tests/Properties/launchSettings.json new file mode 100644 index 0000000000..22605b6a4c --- /dev/null +++ b/src/NSwag.CodeGeneration.CSharp.Tests/Properties/launchSettings.json @@ -0,0 +1,12 @@ +{ + "profiles": { + "NSwag.CodeGeneration.CSharp.Tests": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:52040" + } + } +} \ No newline at end of file diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs index 1f37e02a22..8807ef6455 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs @@ -1,6 +1,10 @@ -using System; -using System.Threading.Tasks; +#if NETFRAMEWORK +using System.Web.Mvc; +#else using Microsoft.AspNetCore.Mvc; +#endif +using System; +using System.Threading.Tasks; using NSwag.CodeGeneration.CSharp.Models; using NSwag.Generation.WebApi; using Xunit; @@ -11,13 +15,13 @@ public class UseCancellationTokenTests { public class TestController : Controller { - [Route("Foo")] + [Microsoft.AspNetCore.Mvc.Route("Foo")] public string Foo(string test, bool test2) { throw new NotImplementedException(); } - [Route("Bar")] + [Microsoft.AspNetCore.Mvc.Route("Bar")] public void Bar() { throw new NotImplementedException(); diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs index 8a322a6367..e938ecc0b7 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs @@ -1,6 +1,10 @@ +#if NETFRAMEWORK +using System.Web.Mvc; +#else +using Microsoft.AspNetCore.Mvc; +#endif using System; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -10,13 +14,13 @@ public class WrapResponsesTests { public class TestController : Controller { - [Route("Foo")] + [Microsoft.AspNetCore.Mvc.Route("Foo")] public string Foo() { throw new NotImplementedException(); } - [Route("Bar")] + [Microsoft.AspNetCore.Mvc.Route("Bar")] public void Bar() { throw new NotImplementedException(); @@ -55,7 +59,7 @@ public async Task When_success_responses_are_wrapped_then_SwaggerResponse_is_ret WrapResponses = true }); var code = codeGen.GenerateFile(); - + // Assert Assert.Contains("Task>", code); Assert.Contains("Task", code); @@ -75,7 +79,7 @@ public async Task When_success_responses_are_wrapped_then_SwaggerResponse_is_ret var codeGen = new CSharpControllerGenerator(document, new CSharpControllerGeneratorSettings { WrapResponses = true, - + }); var code = codeGen.GenerateFile(); diff --git a/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs b/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs index 32c07f2155..0b307dd032 100644 --- a/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs +++ b/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs @@ -61,7 +61,7 @@ protected override IEnumerable GenerateClientTypes(string controll if (model.GenerateClientInterfaces) { var interfaceTemplate = Settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Client.Interface", model); - yield return new CodeArtifact(model.Class, CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Contract, interfaceTemplate); + yield return new CodeArtifact(model.Class, CodeArtifactType.Interface, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Contract, interfaceTemplate); } var classTemplate = Settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Client.Class", model); @@ -69,6 +69,16 @@ protected override IEnumerable GenerateClientTypes(string controll } } + /// + /// Calculate the filename for the code artifact, for use in multi-file generation . + /// + /// The artifact for which a filename is required. + /// The name of the file into which to place the generated code. + protected override string GetOutputFileName(CodeArtifact artifact) + { + return artifact.TypeName + ".cs"; + } + /// Creates an operation model. /// The operation. /// The settings. diff --git a/src/NSwag.CodeGeneration.CSharp/CSharpClientGeneratorSettings.cs b/src/NSwag.CodeGeneration.CSharp/CSharpClientGeneratorSettings.cs index efe684aa93..7be1c6cee2 100644 --- a/src/NSwag.CodeGeneration.CSharp/CSharpClientGeneratorSettings.cs +++ b/src/NSwag.CodeGeneration.CSharp/CSharpClientGeneratorSettings.cs @@ -6,6 +6,8 @@ // Rico Suter, mail@rsuter.com //----------------------------------------------------------------------- +using NSwag.CodeGeneration.CSharp.Models; + namespace NSwag.CodeGeneration.CSharp { /// Settings for the . @@ -112,5 +114,8 @@ public CSharpClientGeneratorSettings() /// Gets or sets a value indicating whether to expose the JsonSerializerSettings property (default: false). public bool ExposeJsonSerializerSettings { get; set; } + + /// Gets or sets a value indicating whether to output a single file or one file per type. + public CSharpClientGenerationStyle GenerationStyle { get; set; } } } diff --git a/src/NSwag.CodeGeneration.CSharp/CSharpControllerGenerator.cs b/src/NSwag.CodeGeneration.CSharp/CSharpControllerGenerator.cs index 7074ba084a..3512f28840 100644 --- a/src/NSwag.CodeGeneration.CSharp/CSharpControllerGenerator.cs +++ b/src/NSwag.CodeGeneration.CSharp/CSharpControllerGenerator.cs @@ -78,11 +78,21 @@ protected override IEnumerable GenerateClientTypes(string controll yield return new CodeArtifact(model.Class, CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Client, template); } - /// Creates an operation model. - /// The operation. - /// The settings. - /// The operation model. - protected override CSharpOperationModel CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings) + /// + /// Calculate the filename for the code artifact, for use in multi-file generation . + /// + /// The artifact for which a filename is required. + /// The name of the file into which to place the generated code. + protected override string GetOutputFileName(CodeArtifact artifact) + { + return artifact.TypeName + ".cs"; + } + + /// Creates an operation model. + /// The operation. + /// The settings. + /// The operation model. + protected override CSharpOperationModel CreateOperationModel(OpenApiOperation operation, ClientGeneratorBaseSettings settings) { return new CSharpControllerOperationModel(operation, (CSharpControllerGeneratorSettings)settings, this, (CSharpTypeResolver)Resolver); } diff --git a/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs b/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs new file mode 100644 index 0000000000..09579ec11f --- /dev/null +++ b/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NSwag.CodeGeneration.CSharp.Models +{ + /// The CSharp generation style enum. + public enum CSharpClientGenerationStyle + { + /// Output a single file. + SingleFile, + + /// Output one file per type. + OneFilePerType + } +} diff --git a/src/NSwag.CodeGeneration.CSharp/NSwag.CodeGeneration.CSharp.csproj b/src/NSwag.CodeGeneration.CSharp/NSwag.CodeGeneration.CSharp.csproj index 060e91f9fb..98c9c55536 100644 --- a/src/NSwag.CodeGeneration.CSharp/NSwag.CodeGeneration.CSharp.csproj +++ b/src/NSwag.CodeGeneration.CSharp/NSwag.CodeGeneration.CSharp.csproj @@ -1,6 +1,6 @@  - net461;netstandard2.0 + net462;netstandard2.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml @@ -8,7 +8,7 @@ - + diff --git a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs index 8d406a86d1..718e4e5aad 100644 --- a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs +++ b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs @@ -1,15 +1,16 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using NJsonSchema; +using NJsonSchema; +using NJsonSchema.CodeGeneration; using NJsonSchema.CodeGeneration.TypeScript; using NJsonSchema.Generation; using NSwag.CodeGeneration.CSharp; using NSwag.CodeGeneration.OperationNameGenerators; using NSwag.CodeGeneration.TypeScript; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; using Xunit; namespace NSwag.CodeGeneration.Tests @@ -36,6 +37,125 @@ public void When_generating_CSharp_code_then_output_contains_expected_classes() Assert.Contains("class Address", code); } + [Fact] + public void When_generating_CSharp_code_with_empty_client_types_output_returns_empty_list() + { + // Arrange + var document = CreateDocument(); + IEnumerable emptyArtifactList = new List(); + + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; + + var generator = new CSharpClientGenerator(document, settings); + var result = generator.GenerateClientFiles(emptyArtifactList, ClientGeneratorOutputType.Full); + + // Assert + Assert.Empty(result); + } + + [Fact] + public void When_generating_CSharp_code_with_empty_DTO_types_output_returns_empty_list() + { + // Arrange + var document = CreateDocument(); + IEnumerable emptyArtifactList = new List(); + + + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; + + var generator = new CSharpClientGenerator(document, settings); + var result = generator.GenerateDTOFiles(emptyArtifactList, ClientGeneratorOutputType.Full); + + // Assert + Assert.Empty(result); + } + + [Fact] + public void When_generating_CSharp_code_with_single_client_type_output_returns_one_item() + { + // Arrange + var document = CreateDocument(); + + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + var template = settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", new object()); + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; + + var generator = new CSharpClientGenerator(document, settings); + CodeArtifact sampleArtifact = new CodeArtifact("testClass", CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Undefined, template); + IEnumerable artifactList = new List() { sampleArtifact }; + var code = generator.GenerateClientFiles(artifactList, ClientGeneratorOutputType.Full); + + // Assert + Assert.Single(code); + } + + [Fact] + public void When_generating_CSharp_code_with_single_DTO_type_output_returns_one_item() + { + // Arrange + var document = CreateDocument(); + + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + var template = settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", new object()); + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; + + var generator = new CSharpClientGenerator(document, settings); + CodeArtifact sampleArtifact = new CodeArtifact("testClass", CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Undefined, template); + IEnumerable artifactList = new List() { sampleArtifact }; + var code = generator.GenerateDTOFiles(artifactList, ClientGeneratorOutputType.Full); + + // Assert + Assert.Single(code); + } + + [Fact] + public void When_generating_CSharp_code_with_two_client_types_output_returns_two_items() + { + // Arrange + var document = CreateDocument(); + + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + var template = settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", new object()); + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; + + var generator = new CSharpClientGenerator(document, settings); + CodeArtifact sampleArtifact = new CodeArtifact("testClass", CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Undefined, template); + CodeArtifact alternateSampleArtifact = new CodeArtifact("anotherTestClass", CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Undefined, template); + IEnumerable artifactList = new List() { sampleArtifact, alternateSampleArtifact }; + var code = generator.GenerateClientFiles(artifactList, ClientGeneratorOutputType.Full); + + // Assert + Assert.Equal(2, code.Count()); + } + + [Fact] + public void When_generating_CSharp_code_with_two_DTO_types_output_returns_two_items() + { + // Arrange + var document = CreateDocument(); + + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + var template = settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", new object()); + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; + + var generator = new CSharpClientGenerator(document, settings); + CodeArtifact sampleArtifact = new CodeArtifact("testClass", CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Undefined, template); + CodeArtifact alternateSampleArtifact = new CodeArtifact("anotherTestClass", CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Undefined, template); + IEnumerable artifactList = new List() { sampleArtifact, alternateSampleArtifact }; + var code = generator.GenerateDTOFiles(artifactList, ClientGeneratorOutputType.Full); + + // Assert + Assert.Equal(2, code.Count()); + } + [Fact] public void When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code() { diff --git a/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj index 878732e56f..c8c0429843 100644 --- a/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj +++ b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj @@ -1,13 +1,13 @@  - netcoreapp2.1 + net462;net6.0 - + @@ -15,4 +15,7 @@ + + + diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/AngularJSTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/AngularJSTests.cs index e2fc3de2b2..1238ddcbde 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/AngularJSTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/AngularJSTests.cs @@ -2,6 +2,7 @@ using Xunit; using NSwag.Generation.WebApi; using Microsoft.AspNetCore.Mvc; +using System.Web.Mvc; namespace NSwag.CodeGeneration.TypeScript.Tests { @@ -14,7 +15,7 @@ public class Foo public class DiscussionController : Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void AddMessage([FromBody]Foo message) { } @@ -22,7 +23,7 @@ public void AddMessage([FromBody]Foo message) public class UrlEncodedRequestConsumingController: Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] [Consumes("application/x-www-form-urlencoded")] public void AddMessage([FromForm]Foo message, [FromForm]string messageId) { diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/AngularTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/AngularTests.cs index 75ccdcbf87..4fd3ca6c5b 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/AngularTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/AngularTests.cs @@ -2,6 +2,7 @@ using Xunit; using NSwag.Generation.WebApi; using Microsoft.AspNetCore.Mvc; +using System.Web.Mvc; using System.ComponentModel.DataAnnotations; namespace NSwag.CodeGeneration.TypeScript.Tests @@ -13,21 +14,21 @@ public class Foo public string Bar { get; set; } } - [Route("[controller]/[action]")] + [Microsoft.AspNetCore.Mvc.Route("[controller]/[action]")] public class DiscussionController : Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void AddMessage([FromBody, Required]Foo message) { } - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void GenericRequestTest1(GenericRequest1 request) { } - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void GenericRequestTest2(GenericRequest2 request) { @@ -63,7 +64,7 @@ public class GenericRequest2 : GenericRequestBase public class UrlEncodedRequestConsumingController : Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] [Consumes("application/x-www-form-urlencoded")] public void AddMessage([FromForm]Foo message, [FromForm]string messageId) { diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/AxiosTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/AxiosTests.cs index 2114128942..9ad101acda 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/AxiosTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/AxiosTests.cs @@ -2,6 +2,7 @@ using Xunit; using NSwag.Generation.WebApi; using Microsoft.AspNetCore.Mvc; +using System.Web.Mvc; namespace NSwag.CodeGeneration.TypeScript.Tests { @@ -14,7 +15,7 @@ public class Foo public class DiscussionController : Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void AddMessage([FromBody]Foo message) { } @@ -22,7 +23,7 @@ public void AddMessage([FromBody]Foo message) public class UrlEncodedRequestConsumingController: Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] [Consumes("application/x-www-form-urlencoded")] public void AddMessage([FromForm]Foo message, [FromForm]string messageId) { diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/FetchTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/FetchTests.cs index 55b071134e..9c3e38d9bf 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/FetchTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/FetchTests.cs @@ -2,6 +2,7 @@ using Xunit; using NSwag.Generation.WebApi; using Microsoft.AspNetCore.Mvc; +using System.Web.Mvc; namespace NSwag.CodeGeneration.TypeScript.Tests { @@ -14,7 +15,7 @@ public class Foo public class DiscussionController : Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void AddMessage([FromBody]Foo message) { } @@ -22,7 +23,7 @@ public void AddMessage([FromBody]Foo message) public class UrlEncodedRequestConsumingController: Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] [Consumes("application/x-www-form-urlencoded")] public void AddMessage([FromForm]Foo message, [FromForm]string messageId, [FromForm]System.DateTime date, [FromForm]System.Collections.Generic.List list) { diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryCallbacksTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryCallbacksTests.cs index 4cf6aab2c8..bc2b26440e 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryCallbacksTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryCallbacksTests.cs @@ -2,6 +2,7 @@ using Xunit; using NSwag.Generation.WebApi; using Microsoft.AspNetCore.Mvc; +using System.Web.Mvc; namespace NSwag.CodeGeneration.TypeScript.Tests { @@ -14,7 +15,7 @@ public class Foo public class DiscussionController : Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void AddMessage([FromBody]Foo message) { } @@ -22,7 +23,7 @@ public void AddMessage([FromBody]Foo message) public class UrlEncodedRequestConsumingController: Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] [Consumes("application/x-www-form-urlencoded")] public void AddMessage([FromForm]Foo message, [FromForm]string messageId) { diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs index b3bd4cd0ea..a7fa5c6081 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -14,7 +15,7 @@ public class Foo public class DiscussionController : Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] public void AddMessage([FromBody]Foo message) { } @@ -22,7 +23,7 @@ public void AddMessage([FromBody]Foo message) public class UrlEncodedRequestConsumingController: Controller { - [HttpPost] + [Microsoft.AspNetCore.Mvc.HttpPost] [Consumes("application/x-www-form-urlencoded")] public void AddMessage([FromForm]Foo message, [FromForm]string messageId) { @@ -61,7 +62,7 @@ public async Task When_export_types_is_false_then_dont_add_export_before_classes // Arrange var generator = new WebApiOpenApiDocumentGenerator(new WebApiOpenApiDocumentGeneratorSettings()); var document = await generator.GenerateForControllerAsync(); - var json = document.ToJson(); + //var json = document.ToJson(); // Act var codeGen = new TypeScriptClientGenerator(document, new TypeScriptClientGeneratorSettings diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/NSwag.CodeGeneration.TypeScript.Tests.csproj b/src/NSwag.CodeGeneration.TypeScript.Tests/NSwag.CodeGeneration.TypeScript.Tests.csproj index fbf62de773..5b0c67f877 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/NSwag.CodeGeneration.TypeScript.Tests.csproj +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/NSwag.CodeGeneration.TypeScript.Tests.csproj @@ -1,10 +1,9 @@  - netcoreapp2.1 + net462 - @@ -13,7 +12,12 @@ + + + + + diff --git a/src/NSwag.CodeGeneration.TypeScript.Tests/OperationParameterTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/OperationParameterTests.cs index 2c2863238f..38a433d54f 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/OperationParameterTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/OperationParameterTests.cs @@ -8,6 +8,7 @@ using NSwag.Generation.WebApi; using System.Collections.Generic; using Xunit; +using System.Web.Mvc; namespace NSwag.CodeGeneration.TypeScript.Tests { @@ -15,7 +16,7 @@ public class OperationParameterTests { public class FooController : Controller { - [Route("foos/")] + [Microsoft.AspNetCore.Mvc.Route("foos/")] public Foo[] GetFoos([FromUri] Bar[] bars) { return new Foo[0]; diff --git a/src/NSwag.CodeGeneration.TypeScript/NSwag.CodeGeneration.TypeScript.csproj b/src/NSwag.CodeGeneration.TypeScript/NSwag.CodeGeneration.TypeScript.csproj index d37e36ae6a..46619842a9 100644 --- a/src/NSwag.CodeGeneration.TypeScript/NSwag.CodeGeneration.TypeScript.csproj +++ b/src/NSwag.CodeGeneration.TypeScript/NSwag.CodeGeneration.TypeScript.csproj @@ -1,6 +1,6 @@  - net461;netstandard2.0 + net462;netstandard2.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml @@ -8,7 +8,7 @@ - + diff --git a/src/NSwag.CodeGeneration.TypeScript/TypeScriptClientGenerator.cs b/src/NSwag.CodeGeneration.TypeScript/TypeScriptClientGenerator.cs index 0e60d64687..c0ec2d02fe 100644 --- a/src/NSwag.CodeGeneration.TypeScript/TypeScriptClientGenerator.cs +++ b/src/NSwag.CodeGeneration.TypeScript/TypeScriptClientGenerator.cs @@ -129,7 +129,17 @@ protected override TypeScriptOperationModel CreateOperationModel(OpenApiOperatio return new TypeScriptOperationModel(operation, (TypeScriptClientGeneratorSettings)settings, this, Resolver); } - private void UpdateUseDtoClassAndDataConversionCodeProperties(IEnumerable operations) + /// + /// Calculate the filename for the code artifact, for use in multi-file generation . + /// + /// The artifact for which a filename is required. + /// The name of the file into which to place the generated code. + protected override string GetOutputFileName(CodeArtifact artifact) + { + return artifact.TypeName + ".ts"; + } + + private void UpdateUseDtoClassAndDataConversionCodeProperties(IEnumerable operations) { // TODO: Remove this method => move to appropriate location diff --git a/src/NSwag.CodeGeneration/AssemblyInfo.cs b/src/NSwag.CodeGeneration/AssemblyInfo.cs new file mode 100644 index 0000000000..b05bf41225 --- /dev/null +++ b/src/NSwag.CodeGeneration/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: ComVisible(false)] + +[assembly: Guid("09febf7c-895c-4e55-8043-e35880d9ca3f")] + +[assembly: InternalsVisibleTo("NSwag.CodeGeneration.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100eba55a5211cd3198b5ba4b96c5cb70484b376ce083664d47dcb7439a97c3368a26ea54de3ec6d90d2899d39c4e3b65cb4ac7ef8ba5c9ded7c8aa6538757b31291624e96f374c23fdbeeaa85dfe841ab6afffbd3593d2a40c96a0f0888f25d7bd9361611db9450041b57776d33e3acb90794254c428251ddd63aa329d86ec809f")] diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index bca6c349d4..f99daf3dd9 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -6,11 +6,11 @@ // Rico Suter, mail@rsuter.com //----------------------------------------------------------------------- -using System.Collections.Generic; -using System.Linq; using NJsonSchema; using NJsonSchema.CodeGeneration; using NSwag.CodeGeneration.Models; +using System.Collections.Generic; +using System.Linq; namespace NSwag.CodeGeneration { @@ -99,6 +99,97 @@ public string GenerateFile(ClientGeneratorOutputType outputType) /// The code. protected abstract string GenerateFile(IEnumerable clientTypes, IEnumerable dtoTypes, ClientGeneratorOutputType outputType); + /// + /// Calculate the filename for the code artifact, for use in multi-file generation . + /// + /// The artifact for which a filename is required. + /// The name of the file into which to place the generated code. + protected abstract string GetOutputFileName(CodeArtifact artifact); + + /// Generates multiple files containing all the needed types. + /// The code. + public CodeGenerationResult GenerateFiles() + { + return GenerateFiles(ClientGeneratorOutputType.Full); + } + + /// Generates multiple files containing all the needed types. + /// Type of the output. + /// The code. + public CodeGenerationResult GenerateFiles(ClientGeneratorOutputType outputType) + { + var clientTypes = GenerateAllClientTypes(); + + var dtoTypes = BaseSettings.GenerateDtoTypes ? + GenerateDtoTypes() : + Enumerable.Empty(); + + clientTypes = + outputType == ClientGeneratorOutputType.Full ? clientTypes : + outputType == ClientGeneratorOutputType.Implementation ? clientTypes.Where(t => t.Category != CodeArtifactCategory.Contract) : + outputType == ClientGeneratorOutputType.Contracts ? clientTypes.Where(t => t.Category == CodeArtifactCategory.Contract) : + Enumerable.Empty(); + + dtoTypes = + outputType == ClientGeneratorOutputType.Full || + outputType == ClientGeneratorOutputType.Contracts ? dtoTypes : Enumerable.Empty(); + + CodeGenerationResult genResult = new(); + + var clientFileList = GenerateClientFiles(clientTypes, outputType); + var dtoFileList = GenerateDTOFiles(dtoTypes, outputType); + + List artifactList = new(); + artifactList.AddRange(clientFileList); + artifactList.AddRange(dtoFileList); + + genResult.artifacts = artifactList; + + return genResult; + } + + /// Generates files for all the needed client types. + /// List of client types + /// Type of the output. + /// A list of files. + internal IEnumerable GenerateClientFiles(IEnumerable clientTypes, ClientGeneratorOutputType outputType) + { + List clientFileList = new(); + foreach (var clientType in clientTypes) + { + IEnumerable listWithClientTypeToGenerate = new List() { clientType }; + IEnumerable emptyDtoTypeList = Enumerable.Empty(); + CodeGenerationArtifact artifact = new(clientType) + { + FileName = GetOutputFileName(clientType), + Code = GenerateFile(listWithClientTypeToGenerate, emptyDtoTypeList, outputType) + }; + clientFileList.Add(artifact); + } + return clientFileList; + } + + /// Generates files for all the needed DTO types. + /// List of DTO types + /// Type of the output. + /// A list of files. + internal IEnumerable GenerateDTOFiles(IEnumerable dtoTypes, ClientGeneratorOutputType outputType) + { + List dtoFileList = new(); + foreach (var dtoType in dtoTypes) + { + IEnumerable listWithDtoTypeToGenerate = new List() { dtoType }; + IEnumerable emptyClientTypeList = Enumerable.Empty(); + CodeGenerationArtifact artifact = new(dtoType) + { + FileName = GetOutputFileName(dtoType), + Code = GenerateFile(emptyClientTypeList, listWithDtoTypeToGenerate, outputType) + }; + dtoFileList.Add(artifact); + } + return dtoFileList; + } + /// Generates the client types. /// The code artifact collection. protected virtual IEnumerable GenerateAllClientTypes() diff --git a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs new file mode 100644 index 0000000000..f1d44c866f --- /dev/null +++ b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs @@ -0,0 +1,57 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Rico Suter. All rights reserved. +// +// https://github.com/RicoSuter/NSwag/blob/master/LICENSE.md +// Rico Suter, mail@rsuter.com +//----------------------------------------------------------------------- + +using NJsonSchema.CodeGeneration; + +namespace NSwag.CodeGeneration +{ + /// An output from the multi-file generation process. + public class CodeGenerationArtifact + { + private readonly CodeArtifact _sourceArtifact; + + /// + /// Main constructor for the type + /// + /// The source artifact from which this generated result was created + public CodeGenerationArtifact(CodeArtifact sourceArtifact) + { + _sourceArtifact = sourceArtifact; + } + + /// + /// The name of the type that was generated + /// + public string TypeName => _sourceArtifact.TypeName; + + /// + /// The name of the file the code will be placed in + /// + public string FileName { get; set; } + + /// + /// The type of artifact that was generated + /// + public CodeArtifactType Type => _sourceArtifact.Type; + + /// + /// The language of the generated artifact + /// + public CodeArtifactLanguage Language => _sourceArtifact.Language; + + /// + /// The category of the generated artifact + /// + public CodeArtifactCategory Category => _sourceArtifact.Category; + + /// + /// The code that was generated for this artifact + /// + public string Code { get; set; } + } +} \ No newline at end of file diff --git a/src/NSwag.CodeGeneration/CodeGenerationResult.cs b/src/NSwag.CodeGeneration/CodeGenerationResult.cs new file mode 100644 index 0000000000..cdce20394d --- /dev/null +++ b/src/NSwag.CodeGeneration/CodeGenerationResult.cs @@ -0,0 +1,23 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Rico Suter. All rights reserved. +// +// https://github.com/RicoSuter/NSwag/blob/master/LICENSE.md +// Rico Suter, mail@rsuter.com +//----------------------------------------------------------------------- + +using System.Collections; +using System.Collections.Generic; + +namespace NSwag.CodeGeneration +{ + /// The result of multi-file code generation. + public class CodeGenerationResult + { + /// Indicator of whether file generation was successful. + public Result result; + + /// List of generated files. + public IEnumerable artifacts; + } +} \ No newline at end of file diff --git a/src/NSwag.CodeGeneration/DefaultTemplateFactory.cs b/src/NSwag.CodeGeneration/DefaultTemplateFactory.cs index bf399710af..8a38842a34 100644 --- a/src/NSwag.CodeGeneration/DefaultTemplateFactory.cs +++ b/src/NSwag.CodeGeneration/DefaultTemplateFactory.cs @@ -43,10 +43,8 @@ protected override string GetEmbeddedLiquidTemplate(string language, string temp var resource = assembly.GetManifestResourceStream(resourceName); if (resource != null) { - using (var reader = new StreamReader(resource)) - { - return reader.ReadToEnd(); - } + using var reader = new StreamReader(resource); + return reader.ReadToEnd(); } return base.GetEmbeddedLiquidTemplate(language, template); diff --git a/src/NSwag.CodeGeneration/NSwag.CodeGeneration.csproj b/src/NSwag.CodeGeneration/NSwag.CodeGeneration.csproj index a33dea14ca..c4486cf4a9 100644 --- a/src/NSwag.CodeGeneration/NSwag.CodeGeneration.csproj +++ b/src/NSwag.CodeGeneration/NSwag.CodeGeneration.csproj @@ -1,6 +1,6 @@  - net461;netstandard2.0 + net462;netstandard2.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml @@ -10,7 +10,7 @@ - + diff --git a/src/NSwag.CodeGeneration/Result.cs b/src/NSwag.CodeGeneration/Result.cs new file mode 100644 index 0000000000..6bab9c8c04 --- /dev/null +++ b/src/NSwag.CodeGeneration/Result.cs @@ -0,0 +1,20 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Rico Suter. All rights reserved. +// +// https://github.com/RicoSuter/NSwag/blob/master/LICENSE.md +// Rico Suter, mail@rsuter.com +//----------------------------------------------------------------------- + +namespace NSwag.CodeGeneration +{ + /// Indicates whether a code generation attempt has been successful. + public enum Result + { + /// Code generation was a success. + Success, + + /// Code generation was a failure. + Failure + } +} \ No newline at end of file diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 3b63b53603..9536f27009 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -6,288 +6,319 @@ // Rico Suter, mail@rsuter.com //----------------------------------------------------------------------- +using NConsole; +using NJsonSchema.CodeGeneration; +using NSwag.CodeGeneration; +using NSwag.CodeGeneration.CSharp; +using NSwag.CodeGeneration.CSharp.Models; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using NConsole; -using NSwag.CodeGeneration; -using NSwag.CodeGeneration.CSharp; - -#pragma warning disable 1591 namespace NSwag.Commands.CodeGeneration { - [Command(Name = "openapi2csclient", Description = "Generates CSharp client code from a Swagger/OpenAPI specification.")] - public class OpenApiToCSharpClientCommand : SwaggerToCSharpClientCommand - { - } - - [Command(Name = "swagger2csclient", Description = "Generates CSharp client code from a Swagger/OpenAPI specification (obsolete: use openapi2csclient instead).")] - [Obsolete("Use openapi2csclient instead.")] - public class SwaggerToCSharpClientCommand : OpenApiToCSharpCommandBase - { - public SwaggerToCSharpClientCommand() : base(new CSharpClientGeneratorSettings()) - { - } - - [Argument(Name = "ClientBaseClass", IsRequired = false, Description = "The client base class (empty for no base class).")] - public string ClientBaseClass - { - get { return Settings.ClientBaseClass; } - set { Settings.ClientBaseClass = value; } - } - - [Argument(Name = "ConfigurationClass", IsRequired = false, Description = "The configuration class. The setting ClientBaseClass must be set. (empty for no configuration class).")] - public string ConfigurationClass - { - get { return Settings.ConfigurationClass; } - set { Settings.ConfigurationClass = value; } - } - - [Argument(Name = "GenerateClientClasses", IsRequired = false, Description = "Specifies whether generate client classes.")] - public bool GenerateClientClasses - { - get { return Settings.GenerateClientClasses; } - set { Settings.GenerateClientClasses = value; } - } - - [Argument(Name = "GenerateClientInterfaces", IsRequired = false, Description = "Specifies whether generate interfaces for the client classes.")] - public bool GenerateClientInterfaces - { - get { return Settings.GenerateClientInterfaces; } - set { Settings.GenerateClientInterfaces = value; } - } - - [Argument(Name = "ClientBaseInterface", IsRequired = false, Description = "Base interface for client interfaces (empty for no client base interface).")] - public string ClientBaseInterface - { - get { return Settings.ClientBaseInterface; } - set { Settings.ClientBaseInterface = value; } - } - - [Argument(Name = "InjectHttpClient", IsRequired = false, Description = "Specifies whether an HttpClient instance is injected (default: true).")] - public bool InjectHttpClient - { - get { return Settings.InjectHttpClient; } - set { Settings.InjectHttpClient = value; } - } - - [Argument(Name = "DisposeHttpClient", IsRequired = false, Description = "Specifies whether to dispose the HttpClient (injected HttpClient is never disposed).")] - public bool DisposeHttpClient - { - get { return Settings.DisposeHttpClient; } - set { Settings.DisposeHttpClient = value; } - } - - [Argument(Name = "ProtectedMethods", IsRequired = false, Description = "List of methods with a protected access modifier ('classname.methodname').")] - public string[] ProtectedMethods - { - get { return Settings.ProtectedMethods; } - set { Settings.ProtectedMethods = value; } - } - - [Argument(Name = "GenerateExceptionClasses", IsRequired = false, Description = "Specifies whether to generate exception classes (default: true).")] - public bool GenerateExceptionClasses - { - get { return Settings.GenerateExceptionClasses; } - set { Settings.GenerateExceptionClasses = value; } - } - - [Argument(Name = "ExceptionClass", IsRequired = false, Description = "The exception class (default 'SwaggerException', may use '{controller}' placeholder).")] - public string ExceptionClass - { - get { return Settings.ExceptionClass; } - set { Settings.ExceptionClass = value; } - } - - [Argument(Name = "WrapDtoExceptions", IsRequired = false, Description = "Specifies whether DTO exceptions are wrapped in a SwaggerException instance (default: true).")] - public bool WrapDtoExceptions - { - get { return Settings.WrapDtoExceptions; } - set { Settings.WrapDtoExceptions = value; } - } - - [Argument(Name = "UseHttpClientCreationMethod", IsRequired = false, Description = "Specifies whether to call CreateHttpClientAsync on the base class to create a new HttpClient.")] - public bool UseHttpClientCreationMethod - { - get { return Settings.UseHttpClientCreationMethod; } - set { Settings.UseHttpClientCreationMethod = value; } - } - - [Argument(Name = "HttpClientType", IsRequired = false, Description = "Specifies the HttpClient type. By default the 'System.Net.Http.HttpClient' is used.")] - public string HttpClientType - { - get { return Settings.HttpClientType; } - set { Settings.HttpClientType = value; } - } - - [Argument(Name = "UseHttpRequestMessageCreationMethod", IsRequired = false, - Description = "Specifies whether to call CreateHttpRequestMessageAsync on the base class to create a new HttpRequestMethod.")] - public bool UseHttpRequestMessageCreationMethod - { - get { return Settings.UseHttpRequestMessageCreationMethod; } - set { Settings.UseHttpRequestMessageCreationMethod = value; } - } - - [Argument(Name = "UseBaseUrl", IsRequired = false, - Description = "Specifies whether to use and expose the base URL (default: true).")] - public bool UseBaseUrl - { - get { return Settings.UseBaseUrl; } - set { Settings.UseBaseUrl = value; } - } - - [Argument(Name = nameof(GenerateBaseUrlProperty), IsRequired = false, - Description = "Specifies whether to generate the BaseUrl property, must be defined on the base class otherwise (default: true).")] - public bool GenerateBaseUrlProperty - { - get { return Settings.GenerateBaseUrlProperty; } - set { Settings.GenerateBaseUrlProperty = value; } - } - - [Argument(Name = "GenerateSyncMethods", IsRequired = false, - Description = "Specifies whether to generate synchronous methods (not recommended, default: false).")] - public bool GenerateSyncMethods - { - get { return Settings.GenerateSyncMethods; } - set { Settings.GenerateSyncMethods = value; } - } - - [Argument(Name = "GeneratePrepareRequestAndProcessResponseAsAsyncMethods", IsRequired = false, - Description = "Specifies whether to generate PrepareRequest and ProcessResponse methods as asynchronous methods (if true, both must be defined in the base class or in the partial class, default: false).")] - public bool GeneratePrepareRequestAndProcessResponseAsAsyncMethods - { - get { return Settings.GeneratePrepareRequestAndProcessResponseAsAsyncMethods; } - set { Settings.GeneratePrepareRequestAndProcessResponseAsAsyncMethods = value; } - } - - [Argument(Name = nameof(ExposeJsonSerializerSettings), IsRequired = false, - Description = "Specifies whether to expose the JsonSerializerSettings property (default: false).")] - public bool ExposeJsonSerializerSettings - { - get { return Settings.ExposeJsonSerializerSettings; } - set { Settings.ExposeJsonSerializerSettings = value; } - } - - [Argument(Name = "ClientClassAccessModifier", IsRequired = false, Description = "The client class access modifier (default: public).")] - public string ClientClassAccessModifier - { - get { return Settings.ClientClassAccessModifier; } - set { Settings.ClientClassAccessModifier = value; } - } - - [Argument(Name = "TypeAccessModifier", IsRequired = false, Description = "The DTO class/enum access modifier (default: public).")] - public string TypeAccessModifier - { - get { return Settings.CSharpGeneratorSettings.TypeAccessModifier; } - set { Settings.CSharpGeneratorSettings.TypeAccessModifier = value; } - } - - [Argument(Name = "GenerateContractsOutput", IsRequired = false, - Description = "Specifies whether to generate contracts output (interface and models in a separate file set with the ContractsOutput parameter).")] - public bool GenerateContractsOutput { get; set; } - - [Argument(Name = "ContractsNamespace", IsRequired = false, Description = "The contracts .NET namespace.")] - public string ContractsNamespace { get; set; } - - [Argument(Name = "ContractsOutput", IsRequired = false, - Description = "The contracts output file path (optional, if no path is set then a single file with the implementation and contracts is generated).")] - public string ContractsOutputFilePath { get; set; } - - [Argument(Name = "ParameterDateTimeFormat", IsRequired = false, - Description = "Specifies the format for DateTime type method parameters (default: s).")] - public string ParameterDateTimeFormat - { - get { return Settings.ParameterDateTimeFormat; } - set { Settings.ParameterDateTimeFormat = value; } - } - - [Argument(Name = "ParameterDateFormat", IsRequired = false, - Description = "Specifies the format for Date type method parameters (default: yyyy-MM-dd).")] - public string ParameterDateFormat - { - get { return Settings.ParameterDateFormat; } - set { Settings.ParameterDateFormat = value; } - } - - [Argument(Name = "GenerateUpdateJsonSerializerSettingsMethod", IsRequired = false, - Description = "Generate the UpdateJsonSerializerSettings method (must be implemented in the base class otherwise, default: true).")] - public bool GenerateUpdateJsonSerializerSettingsMethod - { - get { return Settings.GenerateUpdateJsonSerializerSettingsMethod; } - set { Settings.GenerateUpdateJsonSerializerSettingsMethod = value; } - } - - [Argument(Name = "UseRequestAndResponseSerializationSettings", IsRequired = false, - Description = "Generate different request and response serialization settings (default: false).")] - public bool UseRequestAndResponseSerializationSettings - { - get { return Settings.UseRequestAndResponseSerializationSettings; } - set { Settings.UseRequestAndResponseSerializationSettings = value; } - } - - [Argument(Name = "SerializeTypeInformation", IsRequired = false, - Description = "Serialize the type information in a $type property (not recommended, also sets TypeNameHandling = Auto, default: true).")] - public bool SerializeTypeInformation - { - get { return Settings.SerializeTypeInformation; } - set { Settings.SerializeTypeInformation = value; } - } - - [Argument(Name = nameof(QueryNullValue), IsRequired = false, - Description = "The null value used for query parameters which are null (default: '').")] - public string QueryNullValue - { - get { return Settings.QueryNullValue; } - set { Settings.QueryNullValue = value; } - } - - public override async Task RunAsync(CommandLineProcessor processor, IConsoleHost host) - { - var result = await RunAsync(); - foreach (var pair in result) - { - await TryWriteFileOutputAsync(pair.Key, host, () => pair.Value).ConfigureAwait(false); - } - - return result; - } - - public async Task> RunAsync() - { - var document = await GetInputSwaggerDocument().ConfigureAwait(false); - var clientGenerator = new CSharpClientGenerator(document, Settings); - - if (GenerateContractsOutput) - { - var result = new Dictionary(); - GenerateContracts(result, clientGenerator); - GenerateImplementation(result, clientGenerator); - return result; - } - - return new Dictionary - { - { OutputFilePath ?? "Full", clientGenerator.GenerateFile(ClientGeneratorOutputType.Full) } - }; - } - - private void GenerateImplementation(Dictionary result, CSharpClientGenerator clientGenerator) - { - var savedAdditionalNamespaceUsages = Settings.AdditionalNamespaceUsages?.ToArray(); - Settings.AdditionalNamespaceUsages = - Settings.AdditionalNamespaceUsages?.Concat(new[] { ContractsNamespace }).ToArray() ?? new[] { ContractsNamespace }; - result[OutputFilePath ?? "Implementation"] = clientGenerator.GenerateFile(ClientGeneratorOutputType.Implementation); - Settings.AdditionalNamespaceUsages = savedAdditionalNamespaceUsages; - } - - private void GenerateContracts(Dictionary result, CSharpClientGenerator clientGenerator) - { - var savedNamespace = Settings.CSharpGeneratorSettings.Namespace; - Settings.CSharpGeneratorSettings.Namespace = ContractsNamespace; - result[ContractsOutputFilePath ?? "Contracts"] = clientGenerator.GenerateFile(ClientGeneratorOutputType.Contracts); - Settings.CSharpGeneratorSettings.Namespace = savedNamespace; - } - } + [Command(Name = "openapi2csclient", Description = "Generates CSharp client code from a Swagger/OpenAPI specification.")] + public class OpenApiToCSharpClientCommand : SwaggerToCSharpClientCommand + { + } + + [Command(Name = "swagger2csclient", Description = "Generates CSharp client code from a Swagger/OpenAPI specification (obsolete: use openapi2csclient instead).")] + [Obsolete("Use openapi2csclient instead.")] + public class SwaggerToCSharpClientCommand : OpenApiToCSharpCommandBase + { + public SwaggerToCSharpClientCommand() : base(new CSharpClientGeneratorSettings()) + { + } + + [Argument(Name = "ClientBaseClass", IsRequired = false, Description = "The client base class (empty for no base class).")] + public string ClientBaseClass + { + get { return Settings.ClientBaseClass; } + set { Settings.ClientBaseClass = value; } + } + + [Argument(Name = "ConfigurationClass", IsRequired = false, Description = "The configuration class. The setting ClientBaseClass must be set. (empty for no configuration class).")] + public string ConfigurationClass + { + get { return Settings.ConfigurationClass; } + set { Settings.ConfigurationClass = value; } + } + + [Argument(Name = "GenerateClientClasses", IsRequired = false, Description = "Specifies whether generate client classes.")] + public bool GenerateClientClasses + { + get { return Settings.GenerateClientClasses; } + set { Settings.GenerateClientClasses = value; } + } + + [Argument(Name = "GenerateClientInterfaces", IsRequired = false, Description = "Specifies whether generate interfaces for the client classes.")] + public bool GenerateClientInterfaces + { + get { return Settings.GenerateClientInterfaces; } + set { Settings.GenerateClientInterfaces = value; } + } + + [Argument(Name = "ClientBaseInterface", IsRequired = false, Description = "Base interface for client interfaces (empty for no client base interface).")] + public string ClientBaseInterface + { + get { return Settings.ClientBaseInterface; } + set { Settings.ClientBaseInterface = value; } + } + + [Argument(Name = "InjectHttpClient", IsRequired = false, Description = "Specifies whether an HttpClient instance is injected (default: true).")] + public bool InjectHttpClient + { + get { return Settings.InjectHttpClient; } + set { Settings.InjectHttpClient = value; } + } + + [Argument(Name = "DisposeHttpClient", IsRequired = false, Description = "Specifies whether to dispose the HttpClient (injected HttpClient is never disposed).")] + public bool DisposeHttpClient + { + get { return Settings.DisposeHttpClient; } + set { Settings.DisposeHttpClient = value; } + } + + [Argument(Name = "ProtectedMethods", IsRequired = false, Description = "List of methods with a protected access modifier ('classname.methodname').")] + public string[] ProtectedMethods + { + get { return Settings.ProtectedMethods; } + set { Settings.ProtectedMethods = value; } + } + + [Argument(Name = "GenerateExceptionClasses", IsRequired = false, Description = "Specifies whether to generate exception classes (default: true).")] + public bool GenerateExceptionClasses + { + get { return Settings.GenerateExceptionClasses; } + set { Settings.GenerateExceptionClasses = value; } + } + + [Argument(Name = "ExceptionClass", IsRequired = false, Description = "The exception class (default 'SwaggerException', may use '{controller}' placeholder).")] + public string ExceptionClass + { + get { return Settings.ExceptionClass; } + set { Settings.ExceptionClass = value; } + } + + [Argument(Name = "WrapDtoExceptions", IsRequired = false, Description = "Specifies whether DTO exceptions are wrapped in a SwaggerException instance (default: true).")] + public bool WrapDtoExceptions + { + get { return Settings.WrapDtoExceptions; } + set { Settings.WrapDtoExceptions = value; } + } + + [Argument(Name = "GenerationStyle", IsRequired = false, Description = "The operation generation mode ('SingleFile' or 'OneFilePerType').")] + public CSharpClientGenerationStyle GenerationStyle + { + get { return Settings.GenerationStyle; } + set { Settings.GenerationStyle = value; } + } + + [Argument(Name = "UseHttpClientCreationMethod", IsRequired = false, Description = "Specifies whether to call CreateHttpClientAsync on the base class to create a new HttpClient.")] + public bool UseHttpClientCreationMethod + { + get { return Settings.UseHttpClientCreationMethod; } + set { Settings.UseHttpClientCreationMethod = value; } + } + + [Argument(Name = "HttpClientType", IsRequired = false, Description = "Specifies the HttpClient type. By default the 'System.Net.Http.HttpClient' is used.")] + public string HttpClientType + { + get { return Settings.HttpClientType; } + set { Settings.HttpClientType = value; } + } + + [Argument(Name = "UseHttpRequestMessageCreationMethod", IsRequired = false, + Description = "Specifies whether to call CreateHttpRequestMessageAsync on the base class to create a new HttpRequestMethod.")] + public bool UseHttpRequestMessageCreationMethod + { + get { return Settings.UseHttpRequestMessageCreationMethod; } + set { Settings.UseHttpRequestMessageCreationMethod = value; } + } + + [Argument(Name = "UseBaseUrl", IsRequired = false, + Description = "Specifies whether to use and expose the base URL (default: true).")] + public bool UseBaseUrl + { + get { return Settings.UseBaseUrl; } + set { Settings.UseBaseUrl = value; } + } + + [Argument(Name = nameof(GenerateBaseUrlProperty), IsRequired = false, + Description = "Specifies whether to generate the BaseUrl property, must be defined on the base class otherwise (default: true).")] + public bool GenerateBaseUrlProperty + { + get { return Settings.GenerateBaseUrlProperty; } + set { Settings.GenerateBaseUrlProperty = value; } + } + + [Argument(Name = "GenerateSyncMethods", IsRequired = false, + Description = "Specifies whether to generate synchronous methods (not recommended, default: false).")] + public bool GenerateSyncMethods + { + get { return Settings.GenerateSyncMethods; } + set { Settings.GenerateSyncMethods = value; } + } + + [Argument(Name = "GeneratePrepareRequestAndProcessResponseAsAsyncMethods", IsRequired = false, + Description = "Specifies whether to generate PrepareRequest and ProcessResponse methods as asynchronous methods (if true, both must be defined in the base class or in the partial class, default: false).")] + public bool GeneratePrepareRequestAndProcessResponseAsAsyncMethods + { + get { return Settings.GeneratePrepareRequestAndProcessResponseAsAsyncMethods; } + set { Settings.GeneratePrepareRequestAndProcessResponseAsAsyncMethods = value; } + } + + [Argument(Name = nameof(ExposeJsonSerializerSettings), IsRequired = false, + Description = "Specifies whether to expose the JsonSerializerSettings property (default: false).")] + public bool ExposeJsonSerializerSettings + { + get { return Settings.ExposeJsonSerializerSettings; } + set { Settings.ExposeJsonSerializerSettings = value; } + } + + [Argument(Name = "ClientClassAccessModifier", IsRequired = false, Description = "The client class access modifier (default: public).")] + public string ClientClassAccessModifier + { + get { return Settings.ClientClassAccessModifier; } + set { Settings.ClientClassAccessModifier = value; } + } + + [Argument(Name = "TypeAccessModifier", IsRequired = false, Description = "The DTO class/enum access modifier (default: public).")] + public string TypeAccessModifier + { + get { return Settings.CSharpGeneratorSettings.TypeAccessModifier; } + set { Settings.CSharpGeneratorSettings.TypeAccessModifier = value; } + } + + [Argument(Name = "GenerateContractsOutput", IsRequired = false, + Description = "Specifies whether to generate contracts output (interface and models in a separate file set with the ContractsOutput parameter).")] + public bool GenerateContractsOutput { get; set; } + + [Argument(Name = "ContractsNamespace", IsRequired = false, Description = "The contracts .NET namespace.")] + public string ContractsNamespace { get; set; } + + [Argument(Name = "ContractsOutput", IsRequired = false, + Description = "The contracts output file path (optional, if no path is set then a single file with the implementation and contracts is generated).")] + public string ContractsOutputFilePath { get; set; } + + [Argument(Name = "ParameterDateTimeFormat", IsRequired = false, + Description = "Specifies the format for DateTime type method parameters (default: s).")] + public string ParameterDateTimeFormat + { + get { return Settings.ParameterDateTimeFormat; } + set { Settings.ParameterDateTimeFormat = value; } + } + + [Argument(Name = "ParameterDateFormat", IsRequired = false, + Description = "Specifies the format for Date type method parameters (default: yyyy-MM-dd).")] + public string ParameterDateFormat + { + get { return Settings.ParameterDateFormat; } + set { Settings.ParameterDateFormat = value; } + } + + [Argument(Name = "GenerateUpdateJsonSerializerSettingsMethod", IsRequired = false, + Description = "Generate the UpdateJsonSerializerSettings method (must be implemented in the base class otherwise, default: true).")] + public bool GenerateUpdateJsonSerializerSettingsMethod + { + get { return Settings.GenerateUpdateJsonSerializerSettingsMethod; } + set { Settings.GenerateUpdateJsonSerializerSettingsMethod = value; } + } + + [Argument(Name = "UseRequestAndResponseSerializationSettings", IsRequired = false, + Description = "Generate different request and response serialization settings (default: false).")] + public bool UseRequestAndResponseSerializationSettings + { + get { return Settings.UseRequestAndResponseSerializationSettings; } + set { Settings.UseRequestAndResponseSerializationSettings = value; } + } + + [Argument(Name = "SerializeTypeInformation", IsRequired = false, + Description = "Serialize the type information in a $type property (not recommended, also sets TypeNameHandling = Auto, default: true).")] + public bool SerializeTypeInformation + { + get { return Settings.SerializeTypeInformation; } + set { Settings.SerializeTypeInformation = value; } + } + + [Argument(Name = nameof(QueryNullValue), IsRequired = false, + Description = "The null value used for query parameters which are null (default: '').")] + public string QueryNullValue + { + get { return Settings.QueryNullValue; } + set { Settings.QueryNullValue = value; } + } + + public override async Task RunAsync(CommandLineProcessor processor, IConsoleHost host) + { + var result = await RunAsync(); + foreach (var pair in result) + { + await TryWriteFileOutputAsync(pair.Key, host, () => pair.Value).ConfigureAwait(false); + } + + return result; + } + + public async Task> RunAsync() + { + var document = await GetInputSwaggerDocument().ConfigureAwait(false); + var clientGenerator = new CSharpClientGenerator(document, Settings); + + if (Settings.GenerationStyle == CSharpClientGenerationStyle.OneFilePerType) + { + var returnValue = new Dictionary(); + var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); + string interfaceOutputFilePath = OutputFilePath + "\\Interfaces\\"; + string fileName; + foreach (var artifact in genResult.artifacts) + { + fileName = artifact.FileName; + string currentOutputFilePath = OutputFilePath; + if (artifact.Type == CodeArtifactType.Interface) + { + currentOutputFilePath = interfaceOutputFilePath; + fileName = "I" + fileName; + } + else + { + currentOutputFilePath = OutputFilePath + "\\Models\\"; + } + returnValue.Add(currentOutputFilePath + fileName ?? ("Full" + artifact.TypeName), artifact.Code); + } + return returnValue; + } + + if (GenerateContractsOutput) + { + var result = new Dictionary(); + GenerateContracts(result, clientGenerator); + GenerateImplementation(result, clientGenerator); + return result; + } + + return new Dictionary + { + { OutputFilePath ?? "Full", clientGenerator.GenerateFile(ClientGeneratorOutputType.Full) } + }; + } + + private void GenerateImplementation(Dictionary result, CSharpClientGenerator clientGenerator) + { + var savedAdditionalNamespaceUsages = Settings.AdditionalNamespaceUsages?.ToArray(); + Settings.AdditionalNamespaceUsages = + Settings.AdditionalNamespaceUsages?.Concat(new[] { ContractsNamespace }).ToArray() ?? new[] { ContractsNamespace }; + result[OutputFilePath ?? "Implementation"] = clientGenerator.GenerateFile(ClientGeneratorOutputType.Implementation); + Settings.AdditionalNamespaceUsages = savedAdditionalNamespaceUsages; + } + + private void GenerateContracts(Dictionary result, CSharpClientGenerator clientGenerator) + { + var savedNamespace = Settings.CSharpGeneratorSettings.Namespace; + Settings.CSharpGeneratorSettings.Namespace = ContractsNamespace; + result[ContractsOutputFilePath ?? "Contracts"] = clientGenerator.GenerateFile(ClientGeneratorOutputType.Contracts); + Settings.CSharpGeneratorSettings.Namespace = savedNamespace; + } + } } diff --git a/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs b/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs index 9002332e57..6d6b592e76 100644 --- a/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs +++ b/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs @@ -124,7 +124,6 @@ public override async Task RunAsync(CommandLineProcessor processor, ICon var args = new List(); string executable; -#if NET461 var toolDirectory = AppDomain.CurrentDomain.BaseDirectory; if (!Directory.Exists(toolDirectory)) { @@ -172,41 +171,41 @@ public override async Task RunAsync(CommandLineProcessor processor, ICon cleanupFiles.Add(copiedAppConfig); } } -#elif NETCOREAPP || NETSTANDARD - var toolDirectory = AppContext.BaseDirectory; - if (!Directory.Exists(toolDirectory)) - { - toolDirectory = Path.GetDirectoryName(typeof(AspNetCoreToSwaggerCommand).GetTypeInfo().Assembly.Location); - } - - if (projectMetadata.TargetFrameworkIdentifier == ".NETCoreApp" || - projectMetadata.TargetFrameworkIdentifier == "net5.0") - { - executable = "dotnet"; - args.Add("exec"); - args.Add("--depsfile"); - args.Add(projectMetadata.ProjectDepsFilePath); - - args.Add("--runtimeconfig"); - args.Add(projectMetadata.ProjectRuntimeConfigFilePath); - - var binaryName = LauncherBinaryName + ".dll"; - var executorBinary = Path.Combine(toolDirectory, binaryName); - - if (!File.Exists(executorBinary)) - { - binaryName = LauncherBinaryName + ".exe"; - executorBinary = Path.Combine(toolDirectory, binaryName); - } - - if (!File.Exists(executorBinary)) - { - throw new InvalidOperationException($"Unable to locate {binaryName} in {toolDirectory}."); - } - - args.Add(executorBinary); - } -#endif + //#elif NETCOREAPP || NETSTANDARD + // var toolDirectory = AppContext.BaseDirectory; + // if (!Directory.Exists(toolDirectory)) + // { + // toolDirectory = Path.GetDirectoryName(typeof(AspNetCoreToSwaggerCommand).GetTypeInfo().Assembly.Location); + // } + + // if (projectMetadata.TargetFrameworkIdentifier == ".NETCoreApp" || + // projectMetadata.TargetFrameworkIdentifier == "net5.0") + // { + // executable = "dotnet"; + // args.Add("exec"); + // args.Add("--depsfile"); + // args.Add(projectMetadata.ProjectDepsFilePath); + + // args.Add("--runtimeconfig"); + // args.Add(projectMetadata.ProjectRuntimeConfigFilePath); + + // var binaryName = LauncherBinaryName + ".dll"; + // var executorBinary = Path.Combine(toolDirectory, binaryName); + + // if (!File.Exists(executorBinary)) + // { + // binaryName = LauncherBinaryName + ".exe"; + // executorBinary = Path.Combine(toolDirectory, binaryName); + // } + + // if (!File.Exists(executorBinary)) + // { + // throw new InvalidOperationException($"Unable to locate {binaryName} in {toolDirectory}."); + // } + + // args.Add(executorBinary); + // } + //#endif else { throw new InvalidOperationException($"Unsupported target framework '{projectMetadata.TargetFrameworkIdentifier}'."); @@ -342,4 +341,4 @@ private static void TryDeleteFiles(List files) } } } -} +} \ No newline at end of file diff --git a/src/NSwag.Commands/Commands/IsolatedCommandBase.cs b/src/NSwag.Commands/Commands/IsolatedCommandBase.cs index bb4f1d661a..2c823ad255 100644 --- a/src/NSwag.Commands/Commands/IsolatedCommandBase.cs +++ b/src/NSwag.Commands/Commands/IsolatedCommandBase.cs @@ -56,7 +56,7 @@ protected Task RunIsolatedAsync(string configurationFile) ReferencePaths = ReferencePaths.Concat(defaultNugetPackages).ToArray(); } - using (var isolated = new AppDomainIsolation(assemblyDirectory, AssemblyConfig, bindingRedirects, assemblies)) + using (var isolated = new AppDomainIsolation(assemblyDirectory, AssemblyConfig, bindingRedirects, (IEnumerable)assemblies)) { return Task.FromResult(isolated.Object.Run(GetType().FullName, JsonConvert.SerializeObject(this), AssemblyPaths, ReferencePaths)); } diff --git a/src/NSwag.Commands/NSwag.Commands.csproj b/src/NSwag.Commands/NSwag.Commands.csproj index 3961cc38d7..6eb1163fad 100644 --- a/src/NSwag.Commands/NSwag.Commands.csproj +++ b/src/NSwag.Commands/NSwag.Commands.csproj @@ -1,7 +1,7 @@  - net461;netcoreapp2.1;netcoreapp3.1;net5.0;net6.0;net7.0 + net462;net6.0;net7.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml $(NoWarn),618,1591 @@ -11,14 +11,6 @@ - - - - - - - - @@ -26,13 +18,6 @@ - - - - - - - @@ -46,8 +31,8 @@ - - + + @@ -60,7 +45,7 @@ - + diff --git a/src/NSwag.Commands/NSwagCommandProcessor.cs b/src/NSwag.Commands/NSwagCommandProcessor.cs index 6a20ecc6e7..00dc395e91 100644 --- a/src/NSwag.Commands/NSwagCommandProcessor.cs +++ b/src/NSwag.Commands/NSwagCommandProcessor.cs @@ -88,7 +88,7 @@ private void WriteBinDirectory() entryAssembly = typeof(NSwagCommandProcessor).GetTypeInfo().Assembly; } - var binDirectory = DynamicApis.PathGetDirectoryName(new Uri(entryAssembly.CodeBase).LocalPath); + var binDirectory = DynamicApis.PathGetDirectoryName(new Uri(entryAssembly.Location).LocalPath); _host.WriteMessage("NSwag bin directory: " + binDirectory + "\n"); } catch (Exception exception) diff --git a/src/NSwag.Console.x86/NSwag.Console.x86.csproj b/src/NSwag.Console.x86/NSwag.Console.x86.csproj index 50a0134a70..63d5397a8e 100644 --- a/src/NSwag.Console.x86/NSwag.Console.x86.csproj +++ b/src/NSwag.Console.x86/NSwag.Console.x86.csproj @@ -1,6 +1,6 @@  - net461 + net462 Exe exe @@ -10,7 +10,7 @@ x86 true - + TRACE;DEBUG;net46 diff --git a/src/NSwag.Console/NSwag.Console.csproj b/src/NSwag.Console/NSwag.Console.csproj index e0e14afc5a..ec30711253 100644 --- a/src/NSwag.Console/NSwag.Console.csproj +++ b/src/NSwag.Console/NSwag.Console.csproj @@ -1,6 +1,6 @@  - net461 + net462 Exe exe @@ -9,13 +9,13 @@ NSwag true - + TRACE;DEBUG;net46 - + bin\$(Configuration)\ - + bin\$(Configuration)\ diff --git a/src/NSwag.ConsoleCore/NSwag.ConsoleCore.csproj b/src/NSwag.ConsoleCore/NSwag.ConsoleCore.csproj index 2899db20f1..2ddd865ddb 100644 --- a/src/NSwag.ConsoleCore/NSwag.ConsoleCore.csproj +++ b/src/NSwag.ConsoleCore/NSwag.ConsoleCore.csproj @@ -1,6 +1,6 @@  - netcoreapp2.1;netcoreapp3.1;net5.0;net6.0;net7.0 + net6.0;net7.0 Exe dotnet-nswag NSwag.ConsoleCore @@ -13,23 +13,12 @@ - - - - - - - - - - - diff --git a/src/NSwag.Core.Tests/NSwag.Core.Tests.csproj b/src/NSwag.Core.Tests/NSwag.Core.Tests.csproj index b9a45c53e3..879fd8cbf1 100644 --- a/src/NSwag.Core.Tests/NSwag.Core.Tests.csproj +++ b/src/NSwag.Core.Tests/NSwag.Core.Tests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net6.0 false $(NoWarn),618 diff --git a/src/NSwag.Core.Yaml.Tests/NSwag.Core.Yaml.Tests.csproj b/src/NSwag.Core.Yaml.Tests/NSwag.Core.Yaml.Tests.csproj index bb926d4a07..a87e97ae0b 100644 --- a/src/NSwag.Core.Yaml.Tests/NSwag.Core.Yaml.Tests.csproj +++ b/src/NSwag.Core.Yaml.Tests/NSwag.Core.Yaml.Tests.csproj @@ -1,6 +1,6 @@  - netcoreapp3.1 + net6.0 false diff --git a/src/NSwag.Core.Yaml.Tests/References/YamlReferencesTests.cs b/src/NSwag.Core.Yaml.Tests/References/YamlReferencesTests.cs index 3854da4eb3..6fda19efb5 100644 --- a/src/NSwag.Core.Yaml.Tests/References/YamlReferencesTests.cs +++ b/src/NSwag.Core.Yaml.Tests/References/YamlReferencesTests.cs @@ -1,8 +1,8 @@ -using System; +using NJsonSchema; +using System; using System.IO; using System.Reflection; using System.Threading.Tasks; -using NJsonSchema; using Xunit; namespace NSwag.Core.Yaml.Tests.References @@ -31,7 +31,7 @@ public async Task When_yaml_schema_has_references_it_works(string relativePath) private string GetTestDirectory() { - var codeBase = Assembly.GetExecutingAssembly().CodeBase; + var codeBase = Assembly.GetExecutingAssembly().Location; var uri = new UriBuilder(codeBase); return Path.GetDirectoryName(Uri.UnescapeDataString(uri.Path)); } diff --git a/src/NSwag.Core.Yaml/NSwag.Core.Yaml.csproj b/src/NSwag.Core.Yaml/NSwag.Core.Yaml.csproj index a17fe1348c..0244ac3576 100644 --- a/src/NSwag.Core.Yaml/NSwag.Core.Yaml.csproj +++ b/src/NSwag.Core.Yaml/NSwag.Core.Yaml.csproj @@ -1,6 +1,6 @@  - netstandard1.3;net45;netstandard2.0 + netstandard1.3;net462;netstandard2.0 NSwag diff --git a/src/NSwag.Core/NSwag.Core.csproj b/src/NSwag.Core/NSwag.Core.csproj index f14f14b783..a60fa32b92 100644 --- a/src/NSwag.Core/NSwag.Core.csproj +++ b/src/NSwag.Core/NSwag.Core.csproj @@ -1,6 +1,6 @@  - netstandard1.0;net45;netstandard2.0 + netstandard1.0;net462;netstandard2.0 NSwag @@ -10,7 +10,7 @@ - + diff --git a/src/NSwag.Demo.Web/NSwag.Demo.Web.csproj b/src/NSwag.Demo.Web/NSwag.Demo.Web.csproj index 78e375a665..3b1a9560cc 100644 --- a/src/NSwag.Demo.Web/NSwag.Demo.Web.csproj +++ b/src/NSwag.Demo.Web/NSwag.Demo.Web.csproj @@ -14,7 +14,7 @@ Properties NSwag.Demo.Web NSwag.Demo.Web - v4.6.1 + v4.6.2 win true @@ -50,7 +50,6 @@ - @@ -60,14 +59,12 @@ - - diff --git a/src/NSwag.Demo.Web/Web.config b/src/NSwag.Demo.Web/Web.config index 8a4adce57a..319e75fb4e 100644 --- a/src/NSwag.Demo.Web/Web.config +++ b/src/NSwag.Demo.Web/Web.config @@ -1,7 +1,7 @@ - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - - + + + + \ No newline at end of file diff --git a/src/NSwag.Generation.AspNetCore.Tests.Web/NSwag.Generation.AspNetCore.Tests.Web.csproj b/src/NSwag.Generation.AspNetCore.Tests.Web/NSwag.Generation.AspNetCore.Tests.Web.csproj index 912ab749ef..21c03f9e58 100644 --- a/src/NSwag.Generation.AspNetCore.Tests.Web/NSwag.Generation.AspNetCore.Tests.Web.csproj +++ b/src/NSwag.Generation.AspNetCore.Tests.Web/NSwag.Generation.AspNetCore.Tests.Web.csproj @@ -1,7 +1,7 @@  - net5.0;net6.0;net7.0;netcoreapp2.1;netcoreapp3.1 + net6.0;net7.0 true $(NoWarn),618,1591 enable @@ -9,17 +9,7 @@ - - - - - - - - - - - + diff --git a/src/NSwag.Generation.AspNetCore.Tests/NSwag.Generation.AspNetCore.Tests.csproj b/src/NSwag.Generation.AspNetCore.Tests/NSwag.Generation.AspNetCore.Tests.csproj index 6f9e6b1267..f352ee1083 100644 --- a/src/NSwag.Generation.AspNetCore.Tests/NSwag.Generation.AspNetCore.Tests.csproj +++ b/src/NSwag.Generation.AspNetCore.Tests/NSwag.Generation.AspNetCore.Tests.csproj @@ -1,6 +1,6 @@  - netcoreapp2.1;netcoreapp3.1;net5.0;net6.0;net7.0 + net6.0;net7.0 $(NoWarn),618,1591 @@ -11,23 +11,6 @@ - - - - - - - - - - - - - - - - - @@ -40,6 +23,7 @@ + diff --git a/src/NSwag.Generation.AspNetCore/NSwag.Generation.AspNetCore.csproj b/src/NSwag.Generation.AspNetCore/NSwag.Generation.AspNetCore.csproj index 9b0b7c4e90..b53ca9f1bb 100644 --- a/src/NSwag.Generation.AspNetCore/NSwag.Generation.AspNetCore.csproj +++ b/src/NSwag.Generation.AspNetCore/NSwag.Generation.AspNetCore.csproj @@ -1,18 +1,18 @@  - netstandard1.6;net461;netstandard2.0;netcoreapp3.1;net5.0;net6.0;net7.0 + netstandard1.6;net462;netstandard2.0;net6.0;net7.0 Swagger Documentation AspNetCore $(DefineConstants);ASPNETCORE bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - + - + @@ -22,12 +22,6 @@ - - - - - - diff --git a/src/NSwag.Generation.Tests/NSwag.Generation.Tests.csproj b/src/NSwag.Generation.Tests/NSwag.Generation.Tests.csproj index 7b21162bb1..27a6709995 100644 --- a/src/NSwag.Generation.Tests/NSwag.Generation.Tests.csproj +++ b/src/NSwag.Generation.Tests/NSwag.Generation.Tests.csproj @@ -1,7 +1,7 @@ - netcoreapp3.1 + net6.0 false true $(NoWarn);1591 diff --git a/src/NSwag.Generation.WebApi/NSwag.Generation.WebApi.csproj b/src/NSwag.Generation.WebApi/NSwag.Generation.WebApi.csproj index ecba6cd684..b0daff6192 100644 --- a/src/NSwag.Generation.WebApi/NSwag.Generation.WebApi.csproj +++ b/src/NSwag.Generation.WebApi/NSwag.Generation.WebApi.csproj @@ -1,7 +1,7 @@  - netstandard1.0;net45;netstandard2.0 + netstandard1.0;net462;netstandard2.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml @@ -9,7 +9,7 @@ - + diff --git a/src/NSwag.Generation/NSwag.Generation.csproj b/src/NSwag.Generation/NSwag.Generation.csproj index a98d5a4389..8c661baa13 100644 --- a/src/NSwag.Generation/NSwag.Generation.csproj +++ b/src/NSwag.Generation/NSwag.Generation.csproj @@ -1,6 +1,6 @@  - netstandard1.0;net45;netstandard2.0 + netstandard1.0;net462;netstandard2.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml $(NoWarn),618 @@ -11,7 +11,7 @@ - + diff --git a/src/NSwag.Integration.Console/NSwag.Integration.Console.csproj b/src/NSwag.Integration.Console/NSwag.Integration.Console.csproj index 9b3d33fca5..e5d64ff97e 100644 --- a/src/NSwag.Integration.Console/NSwag.Integration.Console.csproj +++ b/src/NSwag.Integration.Console/NSwag.Integration.Console.csproj @@ -1,7 +1,7 @@  Exe - net46 + net462 true win NSwag.Integration.Console diff --git a/src/NSwag.Integration.WebAPI/NSwag.Integration.WebAPI.csproj b/src/NSwag.Integration.WebAPI/NSwag.Integration.WebAPI.csproj index 6365d73cd2..344a2e9eb4 100644 --- a/src/NSwag.Integration.WebAPI/NSwag.Integration.WebAPI.csproj +++ b/src/NSwag.Integration.WebAPI/NSwag.Integration.WebAPI.csproj @@ -13,7 +13,7 @@ Properties NSwag.Integration.WebAPI NSwag.Integration.WebAPI - v4.6.1 + v4.6.2 win true @@ -51,7 +51,6 @@ - @@ -63,12 +62,10 @@ - - diff --git a/src/NSwag.Integration.WebAPI/Web.config b/src/NSwag.Integration.WebAPI/Web.config index e654a7cc54..51d50e842d 100644 --- a/src/NSwag.Integration.WebAPI/Web.config +++ b/src/NSwag.Integration.WebAPI/Web.config @@ -1,47 +1,55 @@ - + - + + - - - + + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + \ No newline at end of file diff --git a/src/NSwag.MSBuild/NSwag.MSBuild.nuspec b/src/NSwag.MSBuild/NSwag.MSBuild.nuspec index b3a5940671..f26c9c725d 100644 --- a/src/NSwag.MSBuild/NSwag.MSBuild.nuspec +++ b/src/NSwag.MSBuild/NSwag.MSBuild.nuspec @@ -28,7 +28,6 @@ - diff --git a/src/NSwag.Sample.NETCore21/NSwag.Sample.NETCore21.csproj b/src/NSwag.Sample.NETCore21/NSwag.Sample.NETCore21.csproj index d958c42da8..2806a2f96c 100644 --- a/src/NSwag.Sample.NETCore21/NSwag.Sample.NETCore21.csproj +++ b/src/NSwag.Sample.NETCore21/NSwag.Sample.NETCore21.csproj @@ -1,4 +1,4 @@ - +Project Sdk="Microsoft.NET.Sdk.Web"> netcoreapp2.1 diff --git a/src/NSwag.Sample.NetCoreAngular/NSwag.Sample.NetCoreAngular.csproj b/src/NSwag.Sample.NetCoreAngular/NSwag.Sample.NetCoreAngular.csproj index 74aaad7d20..72c5dffbed 100644 --- a/src/NSwag.Sample.NetCoreAngular/NSwag.Sample.NetCoreAngular.csproj +++ b/src/NSwag.Sample.NetCoreAngular/NSwag.Sample.NetCoreAngular.csproj @@ -1,7 +1,7 @@  - netcoreapp2.1 + net6.0 true false @@ -12,6 +12,7 @@ + diff --git a/src/NSwag.Sample.NetCoreAngular/Startup.cs b/src/NSwag.Sample.NetCoreAngular/Startup.cs index b6e0b9760a..508765405b 100644 --- a/src/NSwag.Sample.NetCoreAngular/Startup.cs +++ b/src/NSwag.Sample.NetCoreAngular/Startup.cs @@ -1,20 +1,19 @@ -using System.Collections.Generic; -using System.Reflection; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.SpaServices.Webpack; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -using NSwag.AspNetCore; +using System.Collections.Generic; namespace NSwag.Sample.NetCoreAngular { public class Startup { - public Startup(IHostingEnvironment env) + public Startup(IWebHostEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) @@ -30,7 +29,7 @@ public Startup(IHostingEnvironment env) public void ConfigureServices(IServiceCollection services) { // Add framework services. - services.AddMvc().AddJsonOptions(o => + services.AddMvc().AddNewtonsoftJson(o => { o.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects; o.SerializerSettings.Converters = new List { new StringEnumConverter() }; @@ -40,7 +39,7 @@ public void ConfigureServices(IServiceCollection services) } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggingBuilder loggingBuilder) { app.UseCors(builder => builder .WithOrigins("*") @@ -48,8 +47,8 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF .AllowAnyHeader() .WithExposedHeaders("content-disposition", "content-type")); - loggerFactory.AddConsole(Configuration.GetSection("Logging")); - loggerFactory.AddDebug(); + loggingBuilder.AddConsole(); + loggingBuilder.AddDebug(); app.UseSwaggerUi3(); diff --git a/src/NSwag.Sample.NetCoreAurelia/NSwag.Sample.NetCoreAurelia.csproj b/src/NSwag.Sample.NetCoreAurelia/NSwag.Sample.NetCoreAurelia.csproj index 29f3d24928..d39991b98c 100644 --- a/src/NSwag.Sample.NetCoreAurelia/NSwag.Sample.NetCoreAurelia.csproj +++ b/src/NSwag.Sample.NetCoreAurelia/NSwag.Sample.NetCoreAurelia.csproj @@ -1,7 +1,7 @@  - netcoreapp2.1 + net6.0 true false diff --git a/src/NSwag.Sample.NetCoreAurelia/Startup.cs b/src/NSwag.Sample.NetCoreAurelia/Startup.cs index f8615caf25..8a7fda82c2 100644 --- a/src/NSwag.Sample.NetCoreAurelia/Startup.cs +++ b/src/NSwag.Sample.NetCoreAurelia/Startup.cs @@ -1,17 +1,16 @@ -using System.Reflection; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.SpaServices.Webpack; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using NSwag.AspNetCore; namespace NSwag_Sample_NetCoreAurelia { public class Startup { - public Startup(IHostingEnvironment env) + public Startup(IWebHostEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) @@ -32,7 +31,7 @@ public void ConfigureServices(IServiceCollection services) } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggingBuilder loggingBuilder) { app.UseCors(builder => builder .WithOrigins("*") @@ -40,8 +39,8 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF .AllowAnyHeader() .WithExposedHeaders("content-disposition", "content-type")); - loggerFactory.AddConsole(Configuration.GetSection("Logging")); - loggerFactory.AddDebug(); + loggingBuilder.AddConsole(); + loggingBuilder.AddDebug(); app.UseSwaggerUi3(); @@ -49,7 +48,8 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF { app.UseDeveloperExceptionPage(); - app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions { + app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions + { HotModuleReplacement = false // Aurelia Webpack Plugin HMR currently has issues. Leave this set to false. }); } diff --git a/src/NSwag.Sample.NetGlobalAsax/NSwag.Sample.NetGlobalAsax.csproj b/src/NSwag.Sample.NetGlobalAsax/NSwag.Sample.NetGlobalAsax.csproj index 026a029808..b5480dc97a 100644 --- a/src/NSwag.Sample.NetGlobalAsax/NSwag.Sample.NetGlobalAsax.csproj +++ b/src/NSwag.Sample.NetGlobalAsax/NSwag.Sample.NetGlobalAsax.csproj @@ -14,7 +14,7 @@ NSwag.Sample.NetGlobalAsax NSwag.Sample.NetGlobalAsax win - v4.6.1 + v4.8 false true @@ -27,6 +27,7 @@ 6 false + true @@ -55,9 +56,6 @@ - - - diff --git a/src/NSwag.Sample.NetGlobalAsax/Web.config b/src/NSwag.Sample.NetGlobalAsax/Web.config index 40ff2ba60b..9f1aaf9870 100644 --- a/src/NSwag.Sample.NetGlobalAsax/Web.config +++ b/src/NSwag.Sample.NetGlobalAsax/Web.config @@ -1,69 +1,77 @@ - + - - - - - + + + + + + - - + + - + - - - - - + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + \ No newline at end of file diff --git a/src/NSwag.VersionMissmatchTest/NSwag.VersionMissmatchTest.csproj b/src/NSwag.VersionMissmatchTest/NSwag.VersionMissmatchTest.csproj index 8d79872a0b..ae3d1f8874 100644 --- a/src/NSwag.VersionMissmatchTest/NSwag.VersionMissmatchTest.csproj +++ b/src/NSwag.VersionMissmatchTest/NSwag.VersionMissmatchTest.csproj @@ -2,7 +2,7 @@ Exe - net461 + net462 win true diff --git a/src/NSwag.sln b/src/NSwag.sln index a0a43ddb0f..fe62792585 100644 --- a/src/NSwag.sln +++ b/src/NSwag.sln @@ -136,10 +136,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.AspNetCore.Launcher.x EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.Core.Tests", "NSwag.Core.Tests\NSwag.Core.Tests.csproj", "{810AF444-D713-4CEE-BC9F-13D7875AE69B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.Sample.NETCore21", "NSwag.Sample.NETCore21\NSwag.Sample.NETCore21.csproj", "{B60E7723-91F4-412B-9EB3-4050B71B0DAA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.Sample.NET50", "NSwag.Sample.NET50\NSwag.Sample.NET50.csproj", "{F109D48B-A2FF-497D-8374-FEA60C5F2365}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.Generation.AspNetCore.Tests.Web", "NSwag.Generation.AspNetCore.Tests.Web\NSwag.Generation.AspNetCore.Tests.Web.csproj", "{FDD41017-91E2-4BD8-B827-F851BDEC6B6E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.AssemblyLoader.Tests", "NSwag.AssemblyLoader.Tests\NSwag.AssemblyLoader.Tests.csproj", "{1853262B-6D39-477B-872A-8B5473FE74BB}" @@ -162,10 +158,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00 Build", "00 Build", "{6F Directory.Build.props = Directory.Build.props EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.Sample.NETCore20", "NSwag.Sample.NETCore20\NSwag.Sample.NETCore20.csproj", "{37563171-4C09-4BCD-B2FB-08F786198909}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.Sample.NETCore20.Part", "NSwag.Sample.NETCore20.Part\NSwag.Sample.NETCore20.Part.csproj", "{60438B13-8111-44C3-B5E5-34C3F30FF234}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "..\build\_build.csproj", "{AC3D8125-AE21-49FC-A217-D96C7B585FF9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NSwag.Sample.NET60", "NSwag.Sample.NET60\NSwag.Sample.NET60.csproj", "{DE82965A-6935-43E0-A9A1-F3F35B4487EB}" @@ -872,42 +864,6 @@ Global {810AF444-D713-4CEE-BC9F-13D7875AE69B}.ReleaseTypeScriptStrict|x64.Build.0 = Release|Any CPU {810AF444-D713-4CEE-BC9F-13D7875AE69B}.ReleaseTypeScriptStrict|x86.ActiveCfg = Release|Any CPU {810AF444-D713-4CEE-BC9F-13D7875AE69B}.ReleaseTypeScriptStrict|x86.Build.0 = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Debug|x64.ActiveCfg = Debug|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Debug|x64.Build.0 = Debug|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Debug|x86.ActiveCfg = Debug|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Debug|x86.Build.0 = Debug|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Release|Any CPU.Build.0 = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Release|x64.ActiveCfg = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Release|x64.Build.0 = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Release|x86.ActiveCfg = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.Release|x86.Build.0 = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.ReleaseTypeScriptStrict|Any CPU.ActiveCfg = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.ReleaseTypeScriptStrict|Any CPU.Build.0 = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.ReleaseTypeScriptStrict|x64.ActiveCfg = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.ReleaseTypeScriptStrict|x64.Build.0 = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.ReleaseTypeScriptStrict|x86.ActiveCfg = Release|Any CPU - {B60E7723-91F4-412B-9EB3-4050B71B0DAA}.ReleaseTypeScriptStrict|x86.Build.0 = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Debug|x64.ActiveCfg = Debug|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Debug|x64.Build.0 = Debug|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Debug|x86.ActiveCfg = Debug|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Debug|x86.Build.0 = Debug|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Release|Any CPU.Build.0 = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Release|x64.ActiveCfg = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Release|x64.Build.0 = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Release|x86.ActiveCfg = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.Release|x86.Build.0 = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.ReleaseTypeScriptStrict|Any CPU.ActiveCfg = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.ReleaseTypeScriptStrict|Any CPU.Build.0 = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.ReleaseTypeScriptStrict|x64.ActiveCfg = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.ReleaseTypeScriptStrict|x64.Build.0 = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.ReleaseTypeScriptStrict|x86.ActiveCfg = Release|Any CPU - {F109D48B-A2FF-497D-8374-FEA60C5F2365}.ReleaseTypeScriptStrict|x86.Build.0 = Release|Any CPU {FDD41017-91E2-4BD8-B827-F851BDEC6B6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FDD41017-91E2-4BD8-B827-F851BDEC6B6E}.Debug|Any CPU.Build.0 = Debug|Any CPU {FDD41017-91E2-4BD8-B827-F851BDEC6B6E}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -998,42 +954,6 @@ Global {4BCF42CE-A289-4B6D-92DB-ED95F8ED4B19}.ReleaseTypeScriptStrict|x64.Build.0 = Release|Any CPU {4BCF42CE-A289-4B6D-92DB-ED95F8ED4B19}.ReleaseTypeScriptStrict|x86.ActiveCfg = Release|Any CPU {4BCF42CE-A289-4B6D-92DB-ED95F8ED4B19}.ReleaseTypeScriptStrict|x86.Build.0 = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Debug|x64.ActiveCfg = Debug|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Debug|x64.Build.0 = Debug|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Debug|x86.ActiveCfg = Debug|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Debug|x86.Build.0 = Debug|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Release|Any CPU.Build.0 = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Release|x64.ActiveCfg = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Release|x64.Build.0 = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Release|x86.ActiveCfg = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.Release|x86.Build.0 = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.ReleaseTypeScriptStrict|Any CPU.ActiveCfg = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.ReleaseTypeScriptStrict|Any CPU.Build.0 = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.ReleaseTypeScriptStrict|x64.ActiveCfg = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.ReleaseTypeScriptStrict|x64.Build.0 = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.ReleaseTypeScriptStrict|x86.ActiveCfg = Release|Any CPU - {37563171-4C09-4BCD-B2FB-08F786198909}.ReleaseTypeScriptStrict|x86.Build.0 = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Debug|x64.ActiveCfg = Debug|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Debug|x64.Build.0 = Debug|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Debug|x86.ActiveCfg = Debug|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Debug|x86.Build.0 = Debug|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Release|Any CPU.Build.0 = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Release|x64.ActiveCfg = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Release|x64.Build.0 = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Release|x86.ActiveCfg = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.Release|x86.Build.0 = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.ReleaseTypeScriptStrict|Any CPU.ActiveCfg = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.ReleaseTypeScriptStrict|Any CPU.Build.0 = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.ReleaseTypeScriptStrict|x64.ActiveCfg = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.ReleaseTypeScriptStrict|x64.Build.0 = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.ReleaseTypeScriptStrict|x86.ActiveCfg = Release|Any CPU - {60438B13-8111-44C3-B5E5-34C3F30FF234}.ReleaseTypeScriptStrict|x86.Build.0 = Release|Any CPU {AC3D8125-AE21-49FC-A217-D96C7B585FF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AC3D8125-AE21-49FC-A217-D96C7B585FF9}.Debug|x64.ActiveCfg = Debug|Any CPU {AC3D8125-AE21-49FC-A217-D96C7B585FF9}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -1162,16 +1082,12 @@ Global {B715070B-E76E-4959-894A-623EB7639E5F} = {F0F26A35-C4B6-42D0-A1DF-98CA46A5C560} {E90E9C77-7983-40D0-AAB3-91D16DC639CE} = {F0F26A35-C4B6-42D0-A1DF-98CA46A5C560} {810AF444-D713-4CEE-BC9F-13D7875AE69B} = {634E4ABD-29EC-4EB2-81EF-7E41D6D6F6E0} - {B60E7723-91F4-412B-9EB3-4050B71B0DAA} = {D8CC0D1C-8DAC-49FE-AA78-C028DC124DD5} - {F109D48B-A2FF-497D-8374-FEA60C5F2365} = {D8CC0D1C-8DAC-49FE-AA78-C028DC124DD5} {FDD41017-91E2-4BD8-B827-F851BDEC6B6E} = {634E4ABD-29EC-4EB2-81EF-7E41D6D6F6E0} {1853262B-6D39-477B-872A-8B5473FE74BB} = {634E4ABD-29EC-4EB2-81EF-7E41D6D6F6E0} {E6E40935-0C79-480B-BF29-8C493AC7E518} = {DDBB05AC-B066-48C4-933C-034F401EBB6A} {B6467D5A-7B13-4B06-89BE-2BC7B6615956} = {634E4ABD-29EC-4EB2-81EF-7E41D6D6F6E0} {F237A592-2D74-4C38-B222-2C91029B87F8} = {634E4ABD-29EC-4EB2-81EF-7E41D6D6F6E0} {4BCF42CE-A289-4B6D-92DB-ED95F8ED4B19} = {D8CC0D1C-8DAC-49FE-AA78-C028DC124DD5} - {37563171-4C09-4BCD-B2FB-08F786198909} = {D8CC0D1C-8DAC-49FE-AA78-C028DC124DD5} - {60438B13-8111-44C3-B5E5-34C3F30FF234} = {D8CC0D1C-8DAC-49FE-AA78-C028DC124DD5} {AC3D8125-AE21-49FC-A217-D96C7B585FF9} = {6F5E4FDF-0A82-42D5-94AC-A9CD43CC931D} {DE82965A-6935-43E0-A9A1-F3F35B4487EB} = {D8CC0D1C-8DAC-49FE-AA78-C028DC124DD5} {24693FBC-445E-4360-A1E8-B6F136C563FB} = {D8CC0D1C-8DAC-49FE-AA78-C028DC124DD5} diff --git a/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs new file mode 100644 index 0000000000..42ab8e3d97 --- /dev/null +++ b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs @@ -0,0 +1,28 @@ +using NSwag.CodeGeneration.CSharp.Models; +using System; +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace NSwagStudio.Converters +{ + public class StyleTypeToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + CSharpClientGenerationStyle style = (CSharpClientGenerationStyle)value; + Enum.TryParse((string)parameter, out CSharpClientGenerationStyle target); + + if (style.Equals(target)) + { + return Visibility.Visible; + } + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/NSwagStudio/NSwagStudio.csproj b/src/NSwagStudio/NSwagStudio.csproj index 51d641c5dd..d28ee87aa2 100644 --- a/src/NSwagStudio/NSwagStudio.csproj +++ b/src/NSwagStudio/NSwagStudio.csproj @@ -1,7 +1,7 @@  WinExe - net461 + net462 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true true @@ -29,12 +29,13 @@ - + + diff --git a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs index dd41cbda6b..5e00db01a9 100644 --- a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs +++ b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs @@ -11,13 +11,14 @@ using NJsonSchema.CodeGeneration.CSharp; using NSwag.Commands; using NSwag.Commands.CodeGeneration; +using NSwag.CodeGeneration.CSharp.Models; namespace NSwagStudio.ViewModels.CodeGenerators { public class SwaggerToCSharpClientGeneratorViewModel : ViewModelBase { private string _clientCode; - private SwaggerToCSharpClientCommand _command = new SwaggerToCSharpClientCommand(); + private SwaggerToCSharpClientCommand _command = new(); /// Gets the settings. public SwaggerToCSharpClientCommand Command @@ -35,6 +36,10 @@ public SwaggerToCSharpClientCommand Command .Select(t => (OperationGenerationMode)Enum.Parse(typeof(OperationGenerationMode), t)) .ToArray(); + public NSwag.CodeGeneration.CSharp.Models.CSharpClientGenerationStyle[] GenerationStyles { get; } = Enum.GetNames(typeof(CSharpClientGenerationStyle)) + .Select(t => (CSharpClientGenerationStyle)Enum.Parse(typeof(CSharpClientGenerationStyle), t)) + .ToArray(); + /// Gets the list of class styles. public CSharpClassStyle[] ClassStyles { get; } = Enum.GetNames(typeof(CSharpClassStyle)) .Select(t => (CSharpClassStyle)Enum.Parse(typeof(CSharpClassStyle), t)) diff --git a/src/NSwagStudio/ViewModels/MainWindowModel.cs b/src/NSwagStudio/ViewModels/MainWindowModel.cs index 1b356addbc..37fae3218b 100644 --- a/src/NSwagStudio/ViewModels/MainWindowModel.cs +++ b/src/NSwagStudio/ViewModels/MainWindowModel.cs @@ -10,21 +10,20 @@ using System.IO; using System.Linq; using System.Threading.Tasks; -using System.Windows.Forms; using MyToolkit.Command; using MyToolkit.Storage; using Newtonsoft.Json; using NJsonSchema; using NSwag; using NSwag.Commands; +using System.Windows; +using System.Windows.Input; + +using MessageBox = System.Windows.Forms.MessageBox; +using System.Windows.Forms; namespace NSwagStudio.ViewModels { - using System.Windows; - using System.Windows.Input; - - using MessageBox = System.Windows.Forms.MessageBox; - /// The view model for the MainWindow. public class MainWindowModel : ViewModelBase { @@ -69,7 +68,7 @@ public DocumentModel SelectedDocument public AsyncRelayCommand OpenDocumentCommand { get; } public AsyncRelayCommand CloseDocumentCommand { get; } - + public AsyncRelayCommand> CloseAllDocumentsCommand { get; } public AsyncRelayCommand SaveDocumentCommand { get; } @@ -133,11 +132,13 @@ private void CreateDocument() private async Task OpenDocumentAsync() { - var dlg = new OpenFileDialog(); - dlg.Multiselect = true; - dlg.Title = "Open NSwag settings file"; - dlg.Filter = "NSwag file (*.nswag;*nswag.json)|*.nswag;*nswag.json"; - dlg.RestoreDirectory = true; + var dlg = new OpenFileDialog + { + Multiselect = true, + Title = "Open NSwag settings file", + Filter = "NSwag file (*.nswag;*nswag.json)|*.nswag;*nswag.json", + RestoreDirectory = true + }; if (dlg.ShowDialog() == DialogResult.OK) { foreach (var fileName in dlg.FileNames) @@ -198,7 +199,7 @@ private async Task SaveDocumentAsync(DocumentModel document) { if (File.Exists(document.Document.Path)) { - FocusManager.SetFocusedElement(Application.Current.MainWindow, null); + FocusManager.SetFocusedElement(System.Windows.Application.Current.MainWindow, null); await document.Document.SaveAsync(); MessageBox.Show($"The file {document.Document.Name} has been saved.", "File saved"); return true; @@ -216,7 +217,7 @@ private async Task SaveDocumentAsync(DocumentModel document) private async Task SaveAllDocumentAsync(ObservableCollection documents) { int changeCount = 0; - FocusManager.SetFocusedElement(Application.Current.MainWindow, null); + FocusManager.SetFocusedElement(System.Windows.Application.Current.MainWindow, null); foreach (var document in documents) { if (document.Document.IsDirty) @@ -244,14 +245,16 @@ private async Task SaveAllDocumentAsync(ObservableCollection SaveAsDocumentAsync(DocumentModel document) { - var dlg = new SaveFileDialog(); - dlg.Filter = "NSwag file (*.nswag;nswag.json)|*.nswag;nswag.json"; - dlg.RestoreDirectory = true; - dlg.AddExtension = true; + var dlg = new SaveFileDialog + { + Filter = "NSwag file (*.nswag;nswag.json)|*.nswag;nswag.json", + RestoreDirectory = true, + AddExtension = true + }; if (dlg.ShowDialog() == DialogResult.OK) { document.Document.Path = dlg.FileName; - FocusManager.SetFocusedElement(Application.Current.MainWindow, null); + FocusManager.SetFocusedElement(System.Windows.Application.Current.MainWindow, null); await document.Document.SaveAsync(); return true; } diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 45857730b0..15017f045c 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -1,7 +1,7 @@  + mc:Ignorable="d" d:DesignWidth="800" Height="4248"> @@ -21,11 +20,12 @@ + - + - @@ -33,55 +33,64 @@ - - - - - - - - - - + + + + + + + - @@ -91,7 +100,7 @@ The {controller} placeholder of the Class Name is replaced by generated client name (depends on the OperationGenerationMode strategy). - @@ -99,53 +108,53 @@ - - - - - - - - - - - - - @@ -155,7 +164,7 @@ Visibility="{Binding Command.GenerateClientInterfaces, Converter={StaticResource VisibilityConverter}}" ToolTip="ClientBaseInterface" Margin="0,0,0,12" /> - @@ -169,17 +178,17 @@ - - - @@ -190,8 +199,8 @@ - @@ -204,27 +213,27 @@ - - - - - + @@ -233,20 +242,20 @@ - + - + - + - + @@ -261,7 +270,7 @@ - @@ -269,32 +278,40 @@ - + + - + - + + + + + + + + + + diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs index cda8d7b608..4da60a3f90 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs @@ -2,6 +2,7 @@ using NSwag.Commands; using NSwag.Commands.CodeGeneration; using NSwagStudio.ViewModels.CodeGenerators; +using System.Windows; namespace NSwagStudio.Views.CodeGenerators { @@ -42,5 +43,25 @@ public override bool IsSelected } } } + + public void FolderPicker(object sender, RoutedEventArgs x) + { + System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new(); + var result = folderBrowserDialog.ShowDialog(); + if (result.ToString() != string.Empty) + { + path.Text = folderBrowserDialog.SelectedPath; + } + } + + public void TemplateFolderPicker(object sender, RoutedEventArgs x) + { + System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new(); + var result = folderBrowserDialog.ShowDialog(); + if (result.ToString() != string.Empty) + { + TemplatePath.Text = folderBrowserDialog.SelectedPath; + } + } } } diff --git a/src/UpgradeLog.htm b/src/UpgradeLog.htm new file mode 100644 index 0000000000..dcead35136 --- /dev/null +++ b/src/UpgradeLog.htm @@ -0,0 +1,334 @@ + + + + Migration Report +

+ Migration Report -

Overview

ProjectPathErrorsWarningsMessages
NSwagStudio.InstallerNSwagStudio.Installer\NSwagStudio.Installer.wixproj100
_build..\build\_build.csproj000
00 Build00 Build000
01 Core01 Core000
02 Generation02 Generation000
03 CodeGeneration03 CodeGeneration000
04 ASP.NET04 ASP.NET000
05 Frontends05 Frontends000
06 Tests06 Tests000
07 Integration Tests07 Integration Tests000
08 Packages08 Packages000
09 Samples09 Samples000
NSwag.AnnotationsNSwag.Annotations\NSwag.Annotations.csproj000
NSwag.ApiDescription.ClientNSwag.ApiDescription.Client000
NSwag.AspNet.OwinNSwag.AspNet.Owin\NSwag.AspNet.Owin.csproj000
NSwag.AspNet.WebApiNSwag.AspNet.WebApi\NSwag.AspNet.WebApi.csproj000
NSwag.AspNetCoreNSwag.AspNetCore\NSwag.AspNetCore.csproj000
NSwag.AspNetCore.LauncherNSwag.AspNetCore.Launcher\NSwag.AspNetCore.Launcher.csproj000
NSwag.AspNetCore.Launcher.x86NSwag.AspNetCore.Launcher.x86\NSwag.AspNetCore.Launcher.x86.csproj000
NSwag.AssemblyLoaderNSwag.AssemblyLoader\NSwag.AssemblyLoader.csproj000
NSwag.AssemblyLoader.TestsNSwag.AssemblyLoader.Tests\NSwag.AssemblyLoader.Tests.csproj000
NSwag.CodeGenerationNSwag.CodeGeneration\NSwag.CodeGeneration.csproj000
NSwag.CodeGeneration.CSharpNSwag.CodeGeneration.CSharp\NSwag.CodeGeneration.CSharp.csproj000
NSwag.CodeGeneration.CSharp.TestsNSwag.CodeGeneration.CSharp.Tests\NSwag.CodeGeneration.CSharp.Tests.csproj000
NSwag.CodeGeneration.TestsNSwag.CodeGeneration.Tests\NSwag.CodeGeneration.Tests.csproj000
NSwag.CodeGeneration.TypeScriptNSwag.CodeGeneration.TypeScript\NSwag.CodeGeneration.TypeScript.csproj000
NSwag.CodeGeneration.TypeScript.TestsNSwag.CodeGeneration.TypeScript.Tests\NSwag.CodeGeneration.TypeScript.Tests.csproj000
NSwag.CommandsNSwag.Commands\NSwag.Commands.csproj000
NSwag.ConsoleNSwag.Console\NSwag.Console.csproj000
NSwag.Console.x86NSwag.Console.x86\NSwag.Console.x86.csproj000
NSwag.ConsoleCoreNSwag.ConsoleCore\NSwag.ConsoleCore.csproj000
NSwag.CoreNSwag.Core\NSwag.Core.csproj000
NSwag.Core.TestsNSwag.Core.Tests\NSwag.Core.Tests.csproj000
NSwag.Core.YamlNSwag.Core.Yaml\NSwag.Core.Yaml.csproj000
NSwag.Core.Yaml.TestsNSwag.Core.Yaml.Tests\NSwag.Core.Yaml.Tests.csproj000
NSwag.GenerationNSwag.Generation\NSwag.Generation.csproj000
NSwag.Generation.AspNetCoreNSwag.Generation.AspNetCore\NSwag.Generation.AspNetCore.csproj000
NSwag.Generation.AspNetCore.TestsNSwag.Generation.AspNetCore.Tests\NSwag.Generation.AspNetCore.Tests.csproj000
NSwag.Generation.AspNetCore.Tests.WebNSwag.Generation.AspNetCore.Tests.Web\NSwag.Generation.AspNetCore.Tests.Web.csproj000
NSwag.Generation.TestsNSwag.Generation.Tests\NSwag.Generation.Tests.csproj000
NSwag.Generation.WebApiNSwag.Generation.WebApi\NSwag.Generation.WebApi.csproj000
NSwag.Generation.WebApi.TestsNSwag.Generation.WebApi.Tests\NSwag.Generation.WebApi.Tests.csproj000
NSwag.Integration.ClientPCLNSwag.Integration.ClientPCL\NSwag.Integration.ClientPCL.csproj000
NSwag.Integration.ClientPCL.TestsNSwag.Integration.ClientPCL.Tests\NSwag.Integration.ClientPCL.Tests.csproj000
NSwag.Integration.ConsoleNSwag.Integration.Console\NSwag.Integration.Console.csproj000
NSwag.MSBuildNSwag.MSBuild000
NSwag.NpmNSwag.Npm000
NSwag.Sample.CommonNSwag.Sample.Common\NSwag.Sample.Common.csproj000
NSwag.Sample.NET50NSwag.Sample.NET50\NSwag.Sample.NET50.csproj000
NSwag.Sample.NET60NSwag.Sample.NET60\NSwag.Sample.NET60.csproj000
NSwag.Sample.NET60MinimalNSwag.Sample.NET60Minimal\NSwag.Sample.NET60Minimal.csproj000
NSwag.Sample.NETCore20NSwag.Sample.NETCore20\NSwag.Sample.NETCore20.csproj000
NSwag.Sample.NETCore20.PartNSwag.Sample.NETCore20.Part\NSwag.Sample.NETCore20.Part.csproj000
NSwag.Sample.NETCore21NSwag.Sample.NETCore21\NSwag.Sample.NETCore21.csproj000
NSwag.Sample.NETCore31NSwag.Sample.NETCore31\NSwag.Sample.NETCore31.csproj000
NSwag.Sample.NetCoreAngularNSwag.Sample.NetCoreAngular\NSwag.Sample.NetCoreAngular.csproj000
NSwag.Sample.NetCoreAngular.ClientsNSwag.Sample.NetCoreAngular.Clients\NSwag.Sample.NetCoreAngular.Clients.csproj000
NSwag.Sample.NetCoreAureliaNSwag.Sample.NetCoreAurelia\NSwag.Sample.NetCoreAurelia.csproj000
NSwag.VersionMissmatchTestNSwag.VersionMissmatchTest\NSwag.VersionMissmatchTest.csproj000
NSwagStudioNSwagStudio\NSwagStudio.csproj000
NSwagStudio.ChocolateyNSwagStudio.Chocolatey000
Sample ConfigurationsSample Configurations000
SolutionNSwag.sln001

Solution and projects

NSwagStudio.Installer

Message
NSwagStudio.Installer\NSwagStudio.Installer.wixproj: + The application which this project type is based on was not found. Please try this link for further information: 930c7802-8a8c-48f9-8165-68863bccd9dd

_build

Message
_build logged no messages. +

00 Build

Message
00 Build logged no messages. +

01 Core

Message
01 Core logged no messages. +

02 Generation

Message
02 Generation logged no messages. +

03 CodeGeneration

Message
03 CodeGeneration logged no messages. +

04 ASP.NET

Message
04 ASP.NET logged no messages. +

05 Frontends

Message
05 Frontends logged no messages. +

06 Tests

Message
06 Tests logged no messages. +

07 Integration Tests

Message
07 Integration Tests logged no messages. +

08 Packages

Message
08 Packages logged no messages. +

09 Samples

Message
09 Samples logged no messages. +

NSwag.Annotations

Message
NSwag.Annotations logged no messages. +

NSwag.ApiDescription.Client

Message
NSwag.ApiDescription.Client logged no messages. +

NSwag.AspNet.Owin

Message
NSwag.AspNet.Owin logged no messages. +

NSwag.AspNet.WebApi

Message
NSwag.AspNet.WebApi logged no messages. +

NSwag.AspNetCore

Message
NSwag.AspNetCore logged no messages. +

NSwag.AspNetCore.Launcher

Message
NSwag.AspNetCore.Launcher logged no messages. +

NSwag.AspNetCore.Launcher.x86

Message
NSwag.AspNetCore.Launcher.x86 logged no messages. +

NSwag.AssemblyLoader

Message
NSwag.AssemblyLoader logged no messages. +

NSwag.AssemblyLoader.Tests

Message
NSwag.AssemblyLoader.Tests logged no messages. +

NSwag.CodeGeneration

Message
NSwag.CodeGeneration logged no messages. +

NSwag.CodeGeneration.CSharp

Message
NSwag.CodeGeneration.CSharp logged no messages. +

NSwag.CodeGeneration.CSharp.Tests

Message
NSwag.CodeGeneration.CSharp.Tests logged no messages. +

NSwag.CodeGeneration.Tests

Message
NSwag.CodeGeneration.Tests logged no messages. +

NSwag.CodeGeneration.TypeScript

Message
NSwag.CodeGeneration.TypeScript logged no messages. +

NSwag.CodeGeneration.TypeScript.Tests

Message
NSwag.CodeGeneration.TypeScript.Tests logged no messages. +

NSwag.Commands

Message
NSwag.Commands logged no messages. +

NSwag.Console

Message
NSwag.Console logged no messages. +

NSwag.Console.x86

Message
NSwag.Console.x86 logged no messages. +

NSwag.ConsoleCore

Message
NSwag.ConsoleCore logged no messages. +

NSwag.Core

Message
NSwag.Core logged no messages. +

NSwag.Core.Tests

Message
NSwag.Core.Tests logged no messages. +

NSwag.Core.Yaml

Message
NSwag.Core.Yaml logged no messages. +

NSwag.Core.Yaml.Tests

Message
NSwag.Core.Yaml.Tests logged no messages. +

NSwag.Generation

Message
NSwag.Generation logged no messages. +

NSwag.Generation.AspNetCore

Message
NSwag.Generation.AspNetCore logged no messages. +

NSwag.Generation.AspNetCore.Tests

Message
NSwag.Generation.AspNetCore.Tests logged no messages. +

NSwag.Generation.AspNetCore.Tests.Web

Message
NSwag.Generation.AspNetCore.Tests.Web logged no messages. +

NSwag.Generation.Tests

Message
NSwag.Generation.Tests logged no messages. +

NSwag.Generation.WebApi

Message
NSwag.Generation.WebApi logged no messages. +

NSwag.Generation.WebApi.Tests

Message
NSwag.Generation.WebApi.Tests logged no messages. +

NSwag.Integration.ClientPCL

Message
NSwag.Integration.ClientPCL logged no messages. +

NSwag.Integration.ClientPCL.Tests

Message
NSwag.Integration.ClientPCL.Tests logged no messages. +

NSwag.Integration.Console

Message
NSwag.Integration.Console logged no messages. +

NSwag.MSBuild

Message
NSwag.MSBuild logged no messages. +

NSwag.Npm

Message
NSwag.Npm logged no messages. +

NSwag.Sample.Common

Message
NSwag.Sample.Common logged no messages. +

NSwag.Sample.NET50

Message
NSwag.Sample.NET50 logged no messages. +

NSwag.Sample.NET60

Message
NSwag.Sample.NET60 logged no messages. +

NSwag.Sample.NET60Minimal

Message
NSwag.Sample.NET60Minimal logged no messages. +

NSwag.Sample.NETCore20

Message
NSwag.Sample.NETCore20 logged no messages. +

NSwag.Sample.NETCore20.Part

Message
NSwag.Sample.NETCore20.Part logged no messages. +

NSwag.Sample.NETCore21

Message
NSwag.Sample.NETCore21 logged no messages. +

NSwag.Sample.NETCore31

Message
NSwag.Sample.NETCore31 logged no messages. +

NSwag.Sample.NetCoreAngular

Message
NSwag.Sample.NetCoreAngular logged no messages. +

NSwag.Sample.NetCoreAngular.Clients

Message
NSwag.Sample.NetCoreAngular.Clients logged no messages. +

NSwag.Sample.NetCoreAurelia

Message
NSwag.Sample.NetCoreAurelia logged no messages. +

NSwag.VersionMissmatchTest

Message
NSwag.VersionMissmatchTest logged no messages. +

NSwagStudio

Message
NSwagStudio logged no messages. +

NSwagStudio.Chocolatey

Message
NSwagStudio.Chocolatey logged no messages. +

Sample Configurations

Message
Sample Configurations logged no messages. +

Solution

Message
+ Show 1 additional messages +
NSwag.sln: + The solution file does not require migration.
+ Hide 1 additional messages +
\ No newline at end of file diff --git a/src/UpgradeLog2.htm b/src/UpgradeLog2.htm new file mode 100644 index 0000000000..0e3e554fee --- /dev/null +++ b/src/UpgradeLog2.htm @@ -0,0 +1,330 @@ + + + + Migration Report +

+ Migration Report -

Overview

ProjectPathErrorsWarningsMessages
NSwagStudio.InstallerNSwagStudio.Installer\NSwagStudio.Installer.wixproj100
_build..\build\_build.csproj000
00 Build00 Build000
01 Core01 Core000
02 Generation02 Generation000
03 CodeGeneration03 CodeGeneration000
04 ASP.NET04 ASP.NET000
05 Frontends05 Frontends000
06 Tests06 Tests000
07 Integration Tests07 Integration Tests000
08 Packages08 Packages000
09 Samples09 Samples000
NSwag.AnnotationsNSwag.Annotations\NSwag.Annotations.csproj000
NSwag.ApiDescription.ClientNSwag.ApiDescription.Client000
NSwag.AspNet.OwinNSwag.AspNet.Owin\NSwag.AspNet.Owin.csproj000
NSwag.AspNet.WebApiNSwag.AspNet.WebApi\NSwag.AspNet.WebApi.csproj000
NSwag.AspNetCoreNSwag.AspNetCore\NSwag.AspNetCore.csproj000
NSwag.AspNetCore.LauncherNSwag.AspNetCore.Launcher\NSwag.AspNetCore.Launcher.csproj000
NSwag.AspNetCore.Launcher.x86NSwag.AspNetCore.Launcher.x86\NSwag.AspNetCore.Launcher.x86.csproj000
NSwag.AssemblyLoaderNSwag.AssemblyLoader\NSwag.AssemblyLoader.csproj000
NSwag.AssemblyLoader.TestsNSwag.AssemblyLoader.Tests\NSwag.AssemblyLoader.Tests.csproj000
NSwag.CodeGenerationNSwag.CodeGeneration\NSwag.CodeGeneration.csproj000
NSwag.CodeGeneration.CSharpNSwag.CodeGeneration.CSharp\NSwag.CodeGeneration.CSharp.csproj000
NSwag.CodeGeneration.CSharp.TestsNSwag.CodeGeneration.CSharp.Tests\NSwag.CodeGeneration.CSharp.Tests.csproj000
NSwag.CodeGeneration.TestsNSwag.CodeGeneration.Tests\NSwag.CodeGeneration.Tests.csproj000
NSwag.CodeGeneration.TypeScriptNSwag.CodeGeneration.TypeScript\NSwag.CodeGeneration.TypeScript.csproj000
NSwag.CodeGeneration.TypeScript.TestsNSwag.CodeGeneration.TypeScript.Tests\NSwag.CodeGeneration.TypeScript.Tests.csproj000
NSwag.CommandsNSwag.Commands\NSwag.Commands.csproj000
NSwag.ConsoleNSwag.Console\NSwag.Console.csproj000
NSwag.Console.x86NSwag.Console.x86\NSwag.Console.x86.csproj000
NSwag.ConsoleCoreNSwag.ConsoleCore\NSwag.ConsoleCore.csproj000
NSwag.CoreNSwag.Core\NSwag.Core.csproj000
NSwag.Core.TestsNSwag.Core.Tests\NSwag.Core.Tests.csproj000
NSwag.Core.YamlNSwag.Core.Yaml\NSwag.Core.Yaml.csproj000
NSwag.Core.Yaml.TestsNSwag.Core.Yaml.Tests\NSwag.Core.Yaml.Tests.csproj000
NSwag.GenerationNSwag.Generation\NSwag.Generation.csproj000
NSwag.Generation.AspNetCoreNSwag.Generation.AspNetCore\NSwag.Generation.AspNetCore.csproj000
NSwag.Generation.AspNetCore.TestsNSwag.Generation.AspNetCore.Tests\NSwag.Generation.AspNetCore.Tests.csproj000
NSwag.Generation.AspNetCore.Tests.WebNSwag.Generation.AspNetCore.Tests.Web\NSwag.Generation.AspNetCore.Tests.Web.csproj000
NSwag.Generation.TestsNSwag.Generation.Tests\NSwag.Generation.Tests.csproj000
NSwag.Generation.WebApiNSwag.Generation.WebApi\NSwag.Generation.WebApi.csproj000
NSwag.Generation.WebApi.TestsNSwag.Generation.WebApi.Tests\NSwag.Generation.WebApi.Tests.csproj000
NSwag.Integration.ClientPCLNSwag.Integration.ClientPCL\NSwag.Integration.ClientPCL.csproj000
NSwag.Integration.ClientPCL.TestsNSwag.Integration.ClientPCL.Tests\NSwag.Integration.ClientPCL.Tests.csproj000
NSwag.Integration.ConsoleNSwag.Integration.Console\NSwag.Integration.Console.csproj000
NSwag.MSBuildNSwag.MSBuild000
NSwag.NpmNSwag.Npm000
NSwag.Sample.CommonNSwag.Sample.Common\NSwag.Sample.Common.csproj000
NSwag.Sample.NET60NSwag.Sample.NET60\NSwag.Sample.NET60.csproj000
NSwag.Sample.NET60MinimalNSwag.Sample.NET60Minimal\NSwag.Sample.NET60Minimal.csproj000
NSwag.Sample.NETCore31NSwag.Sample.NETCore31\NSwag.Sample.NETCore31.csproj000
NSwag.Sample.NetCoreAngularNSwag.Sample.NetCoreAngular\NSwag.Sample.NetCoreAngular.csproj000
NSwag.Sample.NetCoreAngular.ClientsNSwag.Sample.NetCoreAngular.Clients\NSwag.Sample.NetCoreAngular.Clients.csproj000
NSwag.Sample.NetCoreAureliaNSwag.Sample.NetCoreAurelia\NSwag.Sample.NetCoreAurelia.csproj000
NSwag.VersionMissmatchTestNSwag.VersionMissmatchTest\NSwag.VersionMissmatchTest.csproj000
NSwagStudioNSwagStudio\NSwagStudio.csproj000
NSwagStudio.ChocolateyNSwagStudio.Chocolatey000
Sample ConfigurationsSample Configurations000
SolutionNSwag.sln001

Solution and projects

NSwagStudio.Installer

Message
NSwagStudio.Installer\NSwagStudio.Installer.wixproj: + The application which this project type is based on was not found. Please try this link for further information: 930c7802-8a8c-48f9-8165-68863bccd9dd

_build

Message
_build logged no messages. +

00 Build

Message
00 Build logged no messages. +

01 Core

Message
01 Core logged no messages. +

02 Generation

Message
02 Generation logged no messages. +

03 CodeGeneration

Message
03 CodeGeneration logged no messages. +

04 ASP.NET

Message
04 ASP.NET logged no messages. +

05 Frontends

Message
05 Frontends logged no messages. +

06 Tests

Message
06 Tests logged no messages. +

07 Integration Tests

Message
07 Integration Tests logged no messages. +

08 Packages

Message
08 Packages logged no messages. +

09 Samples

Message
09 Samples logged no messages. +

NSwag.Annotations

Message
NSwag.Annotations logged no messages. +

NSwag.ApiDescription.Client

Message
NSwag.ApiDescription.Client logged no messages. +

NSwag.AspNet.Owin

Message
NSwag.AspNet.Owin logged no messages. +

NSwag.AspNet.WebApi

Message
NSwag.AspNet.WebApi logged no messages. +

NSwag.AspNetCore

Message
NSwag.AspNetCore logged no messages. +

NSwag.AspNetCore.Launcher

Message
NSwag.AspNetCore.Launcher logged no messages. +

NSwag.AspNetCore.Launcher.x86

Message
NSwag.AspNetCore.Launcher.x86 logged no messages. +

NSwag.AssemblyLoader

Message
NSwag.AssemblyLoader logged no messages. +

NSwag.AssemblyLoader.Tests

Message
NSwag.AssemblyLoader.Tests logged no messages. +

NSwag.CodeGeneration

Message
NSwag.CodeGeneration logged no messages. +

NSwag.CodeGeneration.CSharp

Message
NSwag.CodeGeneration.CSharp logged no messages. +

NSwag.CodeGeneration.CSharp.Tests

Message
NSwag.CodeGeneration.CSharp.Tests logged no messages. +

NSwag.CodeGeneration.Tests

Message
NSwag.CodeGeneration.Tests logged no messages. +

NSwag.CodeGeneration.TypeScript

Message
NSwag.CodeGeneration.TypeScript logged no messages. +

NSwag.CodeGeneration.TypeScript.Tests

Message
NSwag.CodeGeneration.TypeScript.Tests logged no messages. +

NSwag.Commands

Message
NSwag.Commands logged no messages. +

NSwag.Console

Message
NSwag.Console logged no messages. +

NSwag.Console.x86

Message
NSwag.Console.x86 logged no messages. +

NSwag.ConsoleCore

Message
NSwag.ConsoleCore logged no messages. +

NSwag.Core

Message
NSwag.Core logged no messages. +

NSwag.Core.Tests

Message
NSwag.Core.Tests logged no messages. +

NSwag.Core.Yaml

Message
NSwag.Core.Yaml logged no messages. +

NSwag.Core.Yaml.Tests

Message
NSwag.Core.Yaml.Tests logged no messages. +

NSwag.Generation

Message
NSwag.Generation logged no messages. +

NSwag.Generation.AspNetCore

Message
NSwag.Generation.AspNetCore logged no messages. +

NSwag.Generation.AspNetCore.Tests

Message
NSwag.Generation.AspNetCore.Tests logged no messages. +

NSwag.Generation.AspNetCore.Tests.Web

Message
NSwag.Generation.AspNetCore.Tests.Web logged no messages. +

NSwag.Generation.Tests

Message
NSwag.Generation.Tests logged no messages. +

NSwag.Generation.WebApi

Message
NSwag.Generation.WebApi logged no messages. +

NSwag.Generation.WebApi.Tests

Message
NSwag.Generation.WebApi.Tests logged no messages. +

NSwag.Integration.ClientPCL

Message
NSwag.Integration.ClientPCL logged no messages. +

NSwag.Integration.ClientPCL.Tests

Message
NSwag.Integration.ClientPCL.Tests logged no messages. +

NSwag.Integration.Console

Message
NSwag.Integration.Console logged no messages. +

NSwag.MSBuild

Message
NSwag.MSBuild logged no messages. +

NSwag.Npm

Message
NSwag.Npm logged no messages. +

NSwag.Sample.Common

Message
NSwag.Sample.Common logged no messages. +

NSwag.Sample.NET60

Message
NSwag.Sample.NET60 logged no messages. +

NSwag.Sample.NET60Minimal

Message
NSwag.Sample.NET60Minimal logged no messages. +

NSwag.Sample.NETCore31

Message
NSwag.Sample.NETCore31 logged no messages. +

NSwag.Sample.NetCoreAngular

Message
NSwag.Sample.NetCoreAngular logged no messages. +

NSwag.Sample.NetCoreAngular.Clients

Message
NSwag.Sample.NetCoreAngular.Clients logged no messages. +

NSwag.Sample.NetCoreAurelia

Message
NSwag.Sample.NetCoreAurelia logged no messages. +

NSwag.VersionMissmatchTest

Message
NSwag.VersionMissmatchTest logged no messages. +

NSwagStudio

Message
NSwagStudio logged no messages. +

NSwagStudio.Chocolatey

Message
NSwagStudio.Chocolatey logged no messages. +

Sample Configurations

Message
Sample Configurations logged no messages. +

Solution

Message
+ Show 1 additional messages +
NSwag.sln: + The solution file does not require migration.
+ Hide 1 additional messages +
\ No newline at end of file