From 5b8b9da475508bd08a85c4f892ffdd86350e49a4 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sun, 30 Oct 2022 13:55:30 +0000 Subject: [PATCH 01/42] Initial update from .NET 4.6.1 to .NET 4.6.2, as well as removal of references to netcoreapp2.1 and net5.0. --- .../NSwag.Annotations.csproj | 4 +- .../NSwag.AspNet.Owin.csproj | 10 +- .../NSwag.AspNet.WebApi.csproj | 4 +- .../NSwag.AspNetCore.Launcher.x86.csproj | 2 +- .../NSwag.AspNetCore.Launcher.csproj | 4 +- src/NSwag.AspNetCore/NSwag.AspNetCore.csproj | 10 +- .../NSwag.AssemblyLoader.Tests.csproj | 2 +- .../NSwag.AssemblyLoader.csproj | 2 +- .../AllowNullableBodyParametersTests.cs | 5 +- .../CSharpClientSettingsTests.cs | 1 - .../NSwag.CodeGeneration.CSharp.Tests.csproj | 8 +- .../NSwag.CodeGeneration.CSharp.csproj | 4 +- .../NSwag.CodeGeneration.Tests.csproj | 3 +- ...wag.CodeGeneration.TypeScript.Tests.csproj | 3 +- .../NSwag.CodeGeneration.TypeScript.csproj | 4 +- .../NSwag.CodeGeneration.csproj | 4 +- src/NSwag.Commands/NSwag.Commands.csproj | 21 +- .../NSwag.Console.x86.csproj | 4 +- src/NSwag.Console/NSwag.Console.csproj | 8 +- .../NSwag.ConsoleCore.csproj | 13 +- src/NSwag.Core.Yaml/NSwag.Core.Yaml.csproj | 2 +- src/NSwag.Core/NSwag.Core.csproj | 4 +- src/NSwag.Demo.Web/NSwag.Demo.Web.csproj | 5 +- src/NSwag.Demo.Web/Web.config | 70 ++-- ...wag.Generation.AspNetCore.Tests.Web.csproj | 14 +- .../NSwag.Generation.AspNetCore.Tests.csproj | 16 +- .../NSwag.Generation.AspNetCore.csproj | 12 +- .../NSwag.Generation.WebApi.csproj | 4 +- src/NSwag.Generation/NSwag.Generation.csproj | 4 +- .../NSwag.Integration.Console.csproj | 2 +- .../NSwag.Integration.WebAPI.csproj | 5 +- src/NSwag.Integration.WebAPI/Web.config | 50 +-- .../NSwag.Sample.NETCore21.csproj | 2 +- .../NSwag.Sample.NetGlobalAsax.csproj | 6 +- src/NSwag.Sample.NetGlobalAsax/Web.config | 76 ++-- .../NSwag.VersionMissmatchTest.csproj | 2 +- src/NSwag.sln | 42 --- src/NSwagStudio/NSwagStudio.csproj | 2 +- src/UpgradeLog.htm | 334 ++++++++++++++++++ 39 files changed, 506 insertions(+), 262 deletions(-) create mode 100644 src/UpgradeLog.htm 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 c960c5dd2f..10ab95ecaa 100644 --- a/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj +++ b/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj @@ -1,11 +1,11 @@  - net45 + net462 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - + TRACE;DEBUG;NET45 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 6914d671cc..085cf2edff 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 + net462;netstandard1.6;netstandard2.0;netcoreapp3.1;net6.0 Swagger Documentation AspNetCore NetCore TypeScript CodeGen $(MSBuildProjectName).nuspec symbols.nupkg @@ -29,7 +29,7 @@ - + @@ -39,17 +39,13 @@ - + - - - - diff --git a/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj b/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj index a9bed4490e..53b85ca233 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 false diff --git a/src/NSwag.AssemblyLoader/NSwag.AssemblyLoader.csproj b/src/NSwag.AssemblyLoader/NSwag.AssemblyLoader.csproj index 02d14aa8c4..b7445be51e 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..a879e5bf76 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs @@ -3,6 +3,7 @@ using NSwag.Generation.WebApi; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; +using System.Web.Mvc; using Xunit; namespace NSwag.CodeGeneration.CSharp.Tests @@ -102,13 +103,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..65f378603b 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs @@ -1,5 +1,4 @@ using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; 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..638acfe3bb 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/NSwag.CodeGeneration.CSharp.Tests.csproj +++ b/src/NSwag.CodeGeneration.CSharp.Tests/NSwag.CodeGeneration.CSharp.Tests.csproj @@ -1,10 +1,9 @@  - netcoreapp2.1 + net462 - @@ -13,7 +12,12 @@ + + + + + diff --git a/src/NSwag.CodeGeneration.CSharp/NSwag.CodeGeneration.CSharp.csproj b/src/NSwag.CodeGeneration.CSharp/NSwag.CodeGeneration.CSharp.csproj index 2eb63f8d5c..330ac0aaae 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/NSwag.CodeGeneration.Tests.csproj b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj index 878732e56f..a38f3ff8ed 100644 --- a/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj +++ b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj @@ -1,10 +1,9 @@  - netcoreapp2.1 + net462 - 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..e49526d702 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 - diff --git a/src/NSwag.CodeGeneration.TypeScript/NSwag.CodeGeneration.TypeScript.csproj b/src/NSwag.CodeGeneration.TypeScript/NSwag.CodeGeneration.TypeScript.csproj index fe4e6e8cbd..c47f505a97 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/NSwag.CodeGeneration.csproj b/src/NSwag.CodeGeneration/NSwag.CodeGeneration.csproj index a4d43edf58..113651e69b 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.Commands/NSwag.Commands.csproj b/src/NSwag.Commands/NSwag.Commands.csproj index 9ed5377741..70c3365336 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 + net462;netcoreapp3.1;net6.0 bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml $(NoWarn),618,1591 @@ -11,14 +11,6 @@ - - - - - - - - @@ -26,13 +18,6 @@ - - - - - - - @@ -40,7 +25,7 @@ - + @@ -53,7 +38,7 @@ - + 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 6fa2ee93f9..4b911d6955 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 + netcoreapp3.1;net6.0 Exe dotnet-nswag NSwag.ConsoleCore @@ -13,23 +13,12 @@ - - - - - - - - - - - diff --git a/src/NSwag.Core.Yaml/NSwag.Core.Yaml.csproj b/src/NSwag.Core.Yaml/NSwag.Core.Yaml.csproj index 33918e422d..0d2f7fabc7 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 f82c759423..0b70512563 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 456023a06d..3ddf964aa1 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 58093d529e..56670a7a7c 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,24 +1,14 @@  - net5.0;net6.0;netcoreapp2.1;netcoreapp3.1 + net6.0;netcoreapp3.1 true $(NoWarn),618,1591 - - - - - - - - - - - + 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 3fe3c3ae8f..f7b51e175a 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 + netcoreapp3.1;net6.0 $(NoWarn),618,1591 @@ -11,23 +11,10 @@ - - - - - - - - - - - - - @@ -36,6 +23,7 @@ + \ No newline at end of file diff --git a/src/NSwag.Generation.AspNetCore/NSwag.Generation.AspNetCore.csproj b/src/NSwag.Generation.AspNetCore/NSwag.Generation.AspNetCore.csproj index e4be33f3d8..f616d75fda 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 + netstandard1.6;net462;netstandard2.0;netcoreapp3.1;net6.0 Swagger Documentation AspNetCore $(DefineConstants);ASPNETCORE bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - + - + @@ -22,12 +22,6 @@ - - - - - - diff --git a/src/NSwag.Generation.WebApi/NSwag.Generation.WebApi.csproj b/src/NSwag.Generation.WebApi/NSwag.Generation.WebApi.csproj index 42fb75ef96..10c519d6dc 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 c4e1e125fa..a48d89599d 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 79ec9c9155..21195b0264 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.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.NetGlobalAsax/NSwag.Sample.NetGlobalAsax.csproj b/src/NSwag.Sample.NetGlobalAsax/NSwag.Sample.NetGlobalAsax.csproj index 7f5350f364..c9ea2870ac 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 7c196ef946..cecce1233c 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}" @@ -862,42 +858,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 @@ -1116,8 +1076,6 @@ 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} diff --git a/src/NSwagStudio/NSwagStudio.csproj b/src/NSwagStudio/NSwagStudio.csproj index 126c510ff6..36270ef3ea 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 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 From c19537d7c6a70fb4a09667589b1188b1f407a36a Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sun, 30 Oct 2022 14:34:07 +0000 Subject: [PATCH 02/42] Continued fixing effects of updating to v4.6.2 --- .../CSharpClientSettingsTests.cs | 1 + .../FileDownloadTests.cs | 3 +- .../FileTests.cs | 3 +- .../FormParameterTests.cs | 1 + .../HeadRequestTests.cs | 3 +- .../OptionalParameterTests.cs | 7 +- .../UseCancellationTokenTests.cs | 5 +- .../WrapResponsesTests.cs | 5 +- .../NSwag.CodeGeneration.Tests.csproj | 4 + .../AngularJSTests.cs | 5 +- .../AngularTests.cs | 11 +-- .../AxiosTests.cs | 5 +- .../FetchTests.cs | 5 +- .../JQueryCallbacksTests.cs | 5 +- .../JQueryPromisesTests.cs | 5 +- ...wag.CodeGeneration.TypeScript.Tests.csproj | 5 ++ .../AspNetCore/AspNetCoreToOpenApiCommand.cs | 79 +++++++++---------- .../Commands/IsolatedCommandBase.cs | 2 +- 18 files changed, 88 insertions(+), 66 deletions(-) diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs index 65f378603b..fe08f7d3e1 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using System.Web.Mvc; 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..c6eb39ceae 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs @@ -1,6 +1,7 @@ using System; using System.Net.Http; using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -11,7 +12,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..3ae1c7eba0 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs @@ -1,6 +1,7 @@ using System; using System.Net.Http; using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -11,7 +12,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..c6b23577f3 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NJsonSchema; using NSwag.Generation.WebApi; diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs index cc1fe9786e..7bfd167ef3 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -9,7 +10,7 @@ public class HeadRequestTests { public class HeadRequestController : Controller { - [HttpHead] + [Microsoft.AspNetCore.Mvc.HttpHead] public void Foo() { } diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs index bbf8622c7a..1f8f4abfa6 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -11,17 +12,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/UseCancellationTokenTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs index 1f37e02a22..38d07b8f28 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NSwag.CodeGeneration.CSharp.Models; using NSwag.Generation.WebApi; @@ -11,13 +12,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..67c7c19ac5 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs @@ -1,5 +1,6 @@ using System; using System.Threading.Tasks; +using System.Web.Mvc; using Microsoft.AspNetCore.Mvc; using NSwag.Generation.WebApi; using Xunit; @@ -10,13 +11,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(); diff --git a/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj index a38f3ff8ed..efbaa24d28 100644 --- a/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj +++ b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj @@ -14,4 +14,8 @@
+ + + +
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 97ef1bf67b..c766a17718 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..4a0bcc30a2 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) { 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 e49526d702..5b0c67f877 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/NSwag.CodeGeneration.TypeScript.Tests.csproj +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/NSwag.CodeGeneration.TypeScript.Tests.csproj @@ -12,7 +12,12 @@ + + + + +
diff --git a/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs b/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs index 9002332e57..a448f05944 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,45 +171,45 @@ 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); +//#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}'."); - } +// 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}'."); + //} var commandFile = Path.GetTempFileName(); var outputFile = Path.GetTempFileName(); @@ -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..7073e6e608 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)); } From 31cdeaf26068e4bc689c9366f718bf807df99f76 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sun, 30 Oct 2022 15:17:04 +0000 Subject: [PATCH 03/42] Finished updating to .NET 4.6.2 --- .../AppDomainIsolation.cs | 6 +- .../JQueryPromisesTests.cs | 2 +- .../OperationParameterTests.cs | 3 +- .../AspNetCore/AspNetCoreToOpenApiCommand.cs | 78 +++++++++---------- .../Commands/IsolatedCommandBase.cs | 2 +- src/NSwag.Commands/NSwagCommandProcessor.cs | 2 +- 6 files changed, 47 insertions(+), 46 deletions(-) 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.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs b/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs index 4a0bcc30a2..a7fa5c6081 100644 --- a/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs +++ b/src/NSwag.CodeGeneration.TypeScript.Tests/JQueryPromisesTests.cs @@ -62,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/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.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs b/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs index a448f05944..6d6b592e76 100644 --- a/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs +++ b/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCommand.cs @@ -171,45 +171,45 @@ 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 - //else - //{ - // throw new InvalidOperationException($"Unsupported target framework '{projectMetadata.TargetFrameworkIdentifier}'."); - //} + //#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}'."); + } var commandFile = Path.GetTempFileName(); var outputFile = Path.GetTempFileName(); diff --git a/src/NSwag.Commands/Commands/IsolatedCommandBase.cs b/src/NSwag.Commands/Commands/IsolatedCommandBase.cs index 7073e6e608..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, (IEnumerable)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/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) From a1098b1af9dd770680c36ef426f23249611ceb35 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sun, 30 Oct 2022 17:07:30 +0000 Subject: [PATCH 04/42] Started creating GenerateFiles methods --- .../ClientGeneratorBase.cs | 10 ++++++++++ .../CodeGenerationArtifact.cs | 15 +++++++++++++++ .../CodeGenerationResults.cs | 19 +++++++++++++++++++ src/NSwag.CodeGeneration/Result.cs | 16 ++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 src/NSwag.CodeGeneration/CodeGenerationArtifact.cs create mode 100644 src/NSwag.CodeGeneration/CodeGenerationResults.cs create mode 100644 src/NSwag.CodeGeneration/Result.cs diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index bca6c349d4..90072a2d01 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -181,5 +181,15 @@ private List GetOperations(OpenApiDocument document) } return result; } + + public CodeGenerationResults GenerateFiles(ClientGeneratorOutputType outputType) + { + + } + + public void GenerateFiles() + { + + } } } diff --git a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs new file mode 100644 index 0000000000..b40e888202 --- /dev/null +++ b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs @@ -0,0 +1,15 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Rico Suter. All rights reserved. +// +// https://github.com/RicoSuter/NSwag/blob/master/LICENSE.md +// Rico Suter, mail@rsuter.com +//----------------------------------------------------------------------- + +namespace NSwag.CodeGeneration +{ + public class CodeGenerationArtifact + { + + } +} \ No newline at end of file diff --git a/src/NSwag.CodeGeneration/CodeGenerationResults.cs b/src/NSwag.CodeGeneration/CodeGenerationResults.cs new file mode 100644 index 0000000000..a16d7f8fae --- /dev/null +++ b/src/NSwag.CodeGeneration/CodeGenerationResults.cs @@ -0,0 +1,19 @@ +//----------------------------------------------------------------------- +// +// 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 +{ + public class CodeGenerationResults + { + public Result result; + public IEnumerable artifacts; + } +} \ No newline at end of file diff --git a/src/NSwag.CodeGeneration/Result.cs b/src/NSwag.CodeGeneration/Result.cs new file mode 100644 index 0000000000..067cb2b9f6 --- /dev/null +++ b/src/NSwag.CodeGeneration/Result.cs @@ -0,0 +1,16 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Rico Suter. All rights reserved. +// +// https://github.com/RicoSuter/NSwag/blob/master/LICENSE.md +// Rico Suter, mail@rsuter.com +//----------------------------------------------------------------------- + +namespace NSwag.CodeGeneration +{ + public enum Result + { + SUCCESS, + FAILURE + } +} \ No newline at end of file From 79e2e2082f36f247bfbf71357749d88c908c5432 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sun, 30 Oct 2022 18:16:33 +0000 Subject: [PATCH 05/42] Finished GenerateFiles method. --- .../ClientGeneratorBase.cs | 71 +++++++++++++++---- .../CodeGenerationArtifact.cs | 6 +- ...tionResults.cs => CodeGenerationResult.cs} | 2 +- 3 files changed, 64 insertions(+), 15 deletions(-) rename src/NSwag.CodeGeneration/{CodeGenerationResults.cs => CodeGenerationResult.cs} (94%) diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index 90072a2d01..edc580c694 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -8,9 +8,11 @@ using System.Collections.Generic; using System.Linq; +using System.Net.Http.Headers; using NJsonSchema; using NJsonSchema.CodeGeneration; using NSwag.CodeGeneration.Models; +using Parlot.Fluent; namespace NSwag.CodeGeneration { @@ -99,9 +101,62 @@ public string GenerateFile(ClientGeneratorOutputType outputType) /// The code. protected abstract string GenerateFile(IEnumerable clientTypes, IEnumerable dtoTypes, ClientGeneratorOutputType outputType); - /// Generates the client types. - /// The code artifact collection. - protected virtual IEnumerable GenerateAllClientTypes() + 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(); + List artifactList = new(); + + foreach (var clientType in clientTypes) + { + IEnumerable type = new List() { clientType }; + IEnumerable emptyList = Enumerable.Empty(); + CodeGenerationArtifact artifact = new() + { + Code = GenerateFile(type, emptyList, outputType) + }; + artifactList.Add(artifact); + } + + foreach (var dtoType in dtoTypes) + { + IEnumerable type = new List() { dtoType }; + IEnumerable emptyList = Enumerable.Empty(); + CodeGenerationArtifact artifact = new() + { + Code = GenerateFile(emptyList, type, outputType) + }; + artifactList.Add(artifact); + } + + genResult.artifacts = artifactList; + + return genResult; + } + + public void GenerateFiles() + { + + } + + /// Generates the client types. + /// The code artifact collection. + protected virtual IEnumerable GenerateAllClientTypes() { var operations = GetOperations(_document); var clientTypes = new List(); @@ -181,15 +236,5 @@ private List GetOperations(OpenApiDocument document) } return result; } - - public CodeGenerationResults GenerateFiles(ClientGeneratorOutputType outputType) - { - - } - - public void GenerateFiles() - { - - } } } diff --git a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs index b40e888202..d2708366e7 100644 --- a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs +++ b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs @@ -6,10 +6,14 @@ // Rico Suter, mail@rsuter.com //----------------------------------------------------------------------- +using NJsonSchema.CodeGeneration; + namespace NSwag.CodeGeneration { public class CodeGenerationArtifact { - + public string Name { get; } + public CodeArtifactType Type { get; } + public string Code { get; set; } } } \ No newline at end of file diff --git a/src/NSwag.CodeGeneration/CodeGenerationResults.cs b/src/NSwag.CodeGeneration/CodeGenerationResult.cs similarity index 94% rename from src/NSwag.CodeGeneration/CodeGenerationResults.cs rename to src/NSwag.CodeGeneration/CodeGenerationResult.cs index a16d7f8fae..45cdb25f86 100644 --- a/src/NSwag.CodeGeneration/CodeGenerationResults.cs +++ b/src/NSwag.CodeGeneration/CodeGenerationResult.cs @@ -11,7 +11,7 @@ namespace NSwag.CodeGeneration { - public class CodeGenerationResults + public class CodeGenerationResult { public Result result; public IEnumerable artifacts; From 6fb293cf7edd216d9ff8739eb2d151e5688662be Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sun, 30 Oct 2022 18:25:48 +0000 Subject: [PATCH 06/42] Made GenerateFiles less complicated by splitting parts of it into internal methods --- .../ClientGeneratorBase.cs | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index edc580c694..2bd639e329 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -122,36 +122,47 @@ public CodeGenerationResult GenerateFiles(ClientGeneratorOutputType outputType) CodeGenerationResult genResult = new(); List artifactList = new(); - foreach (var clientType in clientTypes) - { - IEnumerable type = new List() { clientType }; - IEnumerable emptyList = Enumerable.Empty(); - CodeGenerationArtifact artifact = new() - { - Code = GenerateFile(type, emptyList, outputType) - }; - artifactList.Add(artifact); - } + artifactList = GenerateClientFiles(artifactList, clientTypes, outputType); + artifactList = GenerateDTOFiles(artifactList, dtoTypes, outputType); + + genResult.artifacts = artifactList; - foreach (var dtoType in dtoTypes) + return genResult; + } + + public void GenerateFiles() + { + + } + + internal List GenerateClientFiles(List result, IEnumerable clientTypes, ClientGeneratorOutputType outputType) + { + foreach (var clientType in clientTypes) { - IEnumerable type = new List() { dtoType }; + IEnumerable type = new List() { clientType }; IEnumerable emptyList = Enumerable.Empty(); CodeGenerationArtifact artifact = new() { - Code = GenerateFile(emptyList, type, outputType) + Code = GenerateFile(type, emptyList, outputType) }; - artifactList.Add(artifact); + result.Add(artifact); } - - genResult.artifacts = artifactList; - - return genResult; + return result; } - public void GenerateFiles() + internal List GenerateDTOFiles(List result, IEnumerable dtoTypes, ClientGeneratorOutputType outputType) { - + foreach (var dtoType in dtoTypes) + { + IEnumerable type = new List() { dtoType }; + IEnumerable emptyList = Enumerable.Empty(); + CodeGenerationArtifact artifact = new() + { + Code = GenerateFile(emptyList, type, outputType) + }; + result.Add(artifact); + } + return result; } /// Generates the client types. From ba6279f16844a04f4476d49a3e72e63289f84682 Mon Sep 17 00:00:00 2001 From: andrewhallmark Date: Wed, 2 Nov 2022 12:38:24 +0000 Subject: [PATCH 07/42] Fixes to upgrades --- build/Build.cs | 21 ++++------ .../NSwag.AspNet.WebApi.csproj | 2 +- .../NSwag.AssemblyLoader.Tests.csproj | 2 +- .../AllowNullableBodyParametersTests.cs | 6 ++- .../CSharpClientSettingsTests.cs | 6 ++- .../FileDownloadTests.cs | 9 ++-- .../FileTests.cs | 9 ++-- .../FormParameterTests.cs | 6 ++- .../HeadRequestTests.cs | 7 +++- .../NSwag.CodeGeneration.CSharp.Tests.csproj | 12 ++++-- .../OptionalParameterTests.cs | 9 ++-- .../Properties/launchSettings.json | 12 ++++++ .../UseCancellationTokenTests.cs | 7 +++- .../WrapResponsesTests.cs | 11 +++-- .../NSwag.CodeGeneration.Tests.csproj | 4 +- src/NSwag.Core.Tests/NSwag.Core.Tests.csproj | 2 +- .../NSwag.Core.Yaml.Tests.csproj | 2 +- .../References/YamlReferencesTests.cs | 6 +-- .../NSwag.Generation.AspNetCore.Tests.csproj | 6 +-- .../NSwag.Generation.Tests.csproj | 2 +- src/NSwag.MSBuild/NSwag.MSBuild.nuspec | 3 +- .../NSwag.Sample.NetCoreAngular.csproj | 3 +- src/NSwag.Sample.NetCoreAngular/Startup.cs | 15 ++++--- .../NSwag.Sample.NetCoreAurelia.csproj | 2 +- src/NSwag.Sample.NetCoreAurelia/Startup.cs | 14 +++---- src/NSwag.sln | 42 ------------------- 26 files changed, 108 insertions(+), 112 deletions(-) create mode 100644 src/NSwag.CodeGeneration.CSharp.Tests/Properties/launchSettings.json diff --git a/build/Build.cs b/build/Build.cs index 9ec68a4b6f..7d02efa8f4 100644 --- a/build/Build.cs +++ b/build/Build.cs @@ -1,8 +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; @@ -16,9 +11,12 @@ using Nuke.Common.Tools.Npm; using Nuke.Common.Tools.VSTest; using Nuke.Common.Utilities.Collections; - +using System; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Xml.Linq; using static Nuke.Common.IO.FileSystemTasks; -using static Nuke.Common.Logger; using static Nuke.Common.Tooling.ProcessTasks; using static Nuke.Common.Tools.Chocolatey.ChocolateyTasks; using static Nuke.Common.Tools.DotNet.DotNetTasks; @@ -106,7 +104,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); } @@ -353,9 +351,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" }); + PublishConsoleProject(consoleX86Project, new[] { "net462" }); + PublishConsoleProject(consoleProject, new[] { "net462" }); + PublishConsoleProject(consoleCoreProject, new[] { "netcoreapp3.1", "net5.0", "net6.0" }); void CopyConsoleBinaries(AbsolutePath target) { @@ -367,7 +365,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.AspNet.WebApi/NSwag.AspNet.WebApi.csproj b/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj index 10ab95ecaa..faf051092c 100644 --- a/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj +++ b/src/NSwag.AspNet.WebApi/NSwag.AspNet.WebApi.csproj @@ -6,7 +6,7 @@ bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - TRACE;DEBUG;NET45 + TRACE;DEBUG;NET462 diff --git a/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj b/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj index 53b85ca233..8ee7be9e12 100644 --- a/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj +++ b/src/NSwag.AssemblyLoader.Tests/NSwag.AssemblyLoader.Tests.csproj @@ -1,6 +1,6 @@  - net462 + net462;net6.0 false diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs index a879e5bf76..36cd579085 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/AllowNullableBodyParametersTests.cs @@ -1,9 +1,13 @@ +#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; using System.Threading.Tasks; -using System.Web.Mvc; using Xunit; namespace NSwag.CodeGeneration.CSharp.Tests diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/CSharpClientSettingsTests.cs index fe08f7d3e1..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 c6eb39ceae..7f5e669294 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FileDownloadTests.cs @@ -1,8 +1,11 @@ -using System; -using System.Net.Http; -using System.Threading.Tasks; +#if NETFRAMEWORK using System.Web.Mvc; +#else using Microsoft.AspNetCore.Mvc; +#endif +using System; +using System.Net.Http; +using System.Threading.Tasks; using NSwag.Generation.WebApi; using Xunit; diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs index 3ae1c7eba0..e3841e236a 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FileTests.cs @@ -1,8 +1,11 @@ -using System; -using System.Net.Http; -using System.Threading.Tasks; +#if NETFRAMEWORK using System.Web.Mvc; +#else using Microsoft.AspNetCore.Mvc; +#endif +using System; +using System.Net.Http; +using System.Threading.Tasks; using NSwag.Generation.WebApi; using Xunit; diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs index c6b23577f3..5cbd16ef06 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/FormParameterTests.cs @@ -1,6 +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 7bfd167ef3..e7a0e02163 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/HeadRequestTests.cs @@ -1,6 +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; @@ -10,7 +13,7 @@ public class HeadRequestTests { public class HeadRequestController : Controller { - [Microsoft.AspNetCore.Mvc.HttpHead] + [HttpHead] public void Foo() { } 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 638acfe3bb..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,23 +1,27 @@  - net462 + net462;net6.0 + + - - - + + + + + diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs index 1f8f4abfa6..4f2eb881f7 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/OptionalParameterTests.cs @@ -1,8 +1,11 @@ -using System; -using System.Linq; -using System.Threading.Tasks; +#if NETFRAMEWORK using System.Web.Mvc; +#else using Microsoft.AspNetCore.Mvc; +#endif +using System; +using System.Linq; +using System.Threading.Tasks; using NSwag.Generation.WebApi; using Xunit; 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 38d07b8f28..8807ef6455 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/UseCancellationTokenTests.cs @@ -1,7 +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; diff --git a/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs b/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs index 67c7c19ac5..e938ecc0b7 100644 --- a/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs +++ b/src/NSwag.CodeGeneration.CSharp.Tests/WrapResponsesTests.cs @@ -1,7 +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.Generation.WebApi; using Xunit; @@ -56,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); @@ -76,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.Tests/NSwag.CodeGeneration.Tests.csproj b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj index efbaa24d28..c8c0429843 100644 --- a/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj +++ b/src/NSwag.CodeGeneration.Tests/NSwag.CodeGeneration.Tests.csproj @@ -1,12 +1,13 @@  - net462 + net462;net6.0 + @@ -15,7 +16,6 @@ - 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.Generation.AspNetCore.Tests/NSwag.Generation.AspNetCore.Tests.csproj b/src/NSwag.Generation.AspNetCore.Tests/NSwag.Generation.AspNetCore.Tests.csproj index f7b51e175a..850076a297 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 @@  - netcoreapp3.1;net6.0 + net6.0 $(NoWarn),618,1591 @@ -11,10 +11,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.MSBuild/NSwag.MSBuild.nuspec b/src/NSwag.MSBuild/NSwag.MSBuild.nuspec index 37109c79bf..6dccfc977d 100644 --- a/src/NSwag.MSBuild/NSwag.MSBuild.nuspec +++ b/src/NSwag.MSBuild/NSwag.MSBuild.nuspec @@ -27,9 +27,8 @@ - - + \ No newline at end of file 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.sln b/src/NSwag.sln index cecce1233c..e8924b7dc9 100644 --- a/src/NSwag.sln +++ b/src/NSwag.sln @@ -158,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}" @@ -948,42 +944,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 @@ -1082,8 +1042,6 @@ Global {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} From 3294f46884aae34317b84b6f623c1a25da46a5dc Mon Sep 17 00:00:00 2001 From: Lorna <68371985+geckogeckogecko@users.noreply.github.com> Date: Sat, 5 Nov 2022 14:34:44 +0000 Subject: [PATCH 08/42] Added functionality to GenerateFiles(), changed output of GenerateClientFiles and GenerateDTO files --- .../ClientGeneratorBase.cs | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index 2bd639e329..44f988726a 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -101,10 +101,15 @@ public string GenerateFile(ClientGeneratorOutputType outputType) /// The code. protected abstract string GenerateFile(IEnumerable clientTypes, IEnumerable dtoTypes, ClientGeneratorOutputType outputType); + public CodeGenerationResult GenerateFiles() + { + return GenerateFiles(ClientGeneratorOutputType.Full); + } + public CodeGenerationResult GenerateFiles(ClientGeneratorOutputType outputType) { var clientTypes = GenerateAllClientTypes(); - + var dtoTypes = BaseSettings.GenerateDtoTypes ? GenerateDtoTypes() : Enumerable.Empty(); @@ -120,23 +125,22 @@ public CodeGenerationResult GenerateFiles(ClientGeneratorOutputType outputType) 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); - artifactList = GenerateClientFiles(artifactList, clientTypes, outputType); - artifactList = GenerateDTOFiles(artifactList, dtoTypes, outputType); - genResult.artifacts = artifactList; return genResult; } - public void GenerateFiles() - { - - } - - internal List GenerateClientFiles(List result, IEnumerable clientTypes, ClientGeneratorOutputType outputType) + internal IEnumerable GenerateClientFiles(IEnumerable clientTypes, ClientGeneratorOutputType outputType) { + List clientFileList = new(); foreach (var clientType in clientTypes) { IEnumerable type = new List() { clientType }; @@ -145,13 +149,14 @@ internal List GenerateClientFiles(List GenerateDTOFiles(List result, IEnumerable dtoTypes, ClientGeneratorOutputType outputType) + internal IEnumerable GenerateDTOFiles(IEnumerable dtoTypes, ClientGeneratorOutputType outputType) { + List dtoFileList = new(); foreach (var dtoType in dtoTypes) { IEnumerable type = new List() { dtoType }; @@ -160,9 +165,9 @@ internal List GenerateDTOFiles(ListGenerates the client types. From d39931da3fd12b190cd0ead76911d46df03243cf Mon Sep 17 00:00:00 2001 From: Lorna <68371985+geckogeckogecko@users.noreply.github.com> Date: Sat, 5 Nov 2022 16:36:48 +0000 Subject: [PATCH 09/42] Added unit tests for GenerateClientFiles and GenerateDTOFiles methods --- .../CodeGenerationTests.cs | 62 ++++++++++++++++++- src/NSwag.CodeGeneration/AssemblyInfo.cs | 8 +++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/NSwag.CodeGeneration/AssemblyInfo.cs diff --git a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs index 8d406a86d1..cbc291efd3 100644 --- a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs +++ b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs @@ -2,9 +2,12 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Runtime; using System.Text.RegularExpressions; using System.Threading.Tasks; +using System.Xml.Linq; using NJsonSchema; +using NJsonSchema.CodeGeneration; using NJsonSchema.CodeGeneration.TypeScript; using NJsonSchema.Generation; using NSwag.CodeGeneration.CSharp; @@ -36,7 +39,64 @@ public void When_generating_CSharp_code_then_output_contains_expected_classes() Assert.Contains("class Address", code); } - [Fact] + [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_list_with_single_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_SystemTextJson_then_output_contains_expected_code() { // Arrange 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")] From 9bac675eb42a8e911397b7eabc61b307d7790ff5 Mon Sep 17 00:00:00 2001 From: Lorna <68371985+geckogeckogecko@users.noreply.github.com> Date: Sat, 5 Nov 2022 17:34:52 +0000 Subject: [PATCH 10/42] Added additional unit tests for GenerateClientFiles and GenerateDTOFiles. Added missing XML comments to new methods in ClientGeneratorBase --- .../CodeGenerationTests.cs | 66 ++++++++++++++++++- .../ClientGeneratorBase.cs | 15 ++++- 2 files changed, 78 insertions(+), 3 deletions(-) diff --git a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs index cbc291efd3..7b63368652 100644 --- a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs +++ b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs @@ -77,7 +77,7 @@ public void When_generating_CSharp_code_with_empty_DTO_types_output_returns_empt } [Fact] - public void When_generating_CSharp_code_with_single_client_type_output_returns_list_with_single_item() + public void When_generating_CSharp_code_with_single_client_type_output_returns_expected_items() { // Arrange var document = CreateDocument(); @@ -96,6 +96,26 @@ public void When_generating_CSharp_code_with_single_client_type_output_returns_l Assert.Single(code); } + [Fact] + public void When_generating_CSharp_code_with_single_DTO_type_output_returns_expected_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); + IEnumerable artifactList = new List() { sampleArtifact }; + var code = generator.GenerateDTOFiles(artifactList, ClientGeneratorOutputType.Full); + + // Assert + Assert.Single(code); + } + [Fact] public void When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code() { @@ -113,7 +133,49 @@ public void When_generating_CSharp_code_with_SystemTextJson_then_output_contains Assert.Contains("new System.Text.Json.JsonSerializerOptions()", code); } - [Fact] + [Fact] + public void When_generating_CSharp_code_with_multiple_client_types_output_returns_expected_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_multiple_DTO_types_output_returns_expected_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_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code() { // Arrange diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index 44f988726a..6038ad6656 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -101,11 +101,16 @@ public string GenerateFile(ClientGeneratorOutputType outputType) /// The code. protected abstract string GenerateFile(IEnumerable clientTypes, IEnumerable dtoTypes, ClientGeneratorOutputType outputType); + /// 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(); @@ -138,7 +143,11 @@ public CodeGenerationResult GenerateFiles(ClientGeneratorOutputType outputType) return genResult; } - internal IEnumerable GenerateClientFiles(IEnumerable clientTypes, ClientGeneratorOutputType outputType) + /// 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) @@ -154,6 +163,10 @@ internal IEnumerable GenerateClientFiles(IEnumerableGenerates files for all the needed DTO types. + /// List of client types + /// Type of the output. + /// A list of files. internal IEnumerable GenerateDTOFiles(IEnumerable dtoTypes, ClientGeneratorOutputType outputType) { List dtoFileList = new(); From 7fc48c40624b375acf8686285228ebd7e4e21b1c Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sun, 6 Nov 2022 12:15:58 +0000 Subject: [PATCH 11/42] Added missing XML comments. Added new enum GenerationStyle to CSharpClientGeneratorSettings. --- .../CSharpClientGeneratorSettings.cs | 5 +++ .../Models/CSharpClientGenerationStyle.cs | 18 ++++++++++ .../CodeGenerationTests.cs | 36 +++++++++---------- .../CodeGenerationArtifact.cs | 4 +++ .../CodeGenerationResult.cs | 4 +++ .../DefaultTemplateFactory.cs | 6 ++-- src/NSwag.CodeGeneration/Result.cs | 8 +++-- 7 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs 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/Models/CSharpClientGenerationStyle.cs b/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs new file mode 100644 index 0000000000..874a0b7b75 --- /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. + Single, + + /// Output one file per type. + Multiple + } +} diff --git a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs index 7b63368652..097c766e7e 100644 --- a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs +++ b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs @@ -116,23 +116,6 @@ public void When_generating_CSharp_code_with_single_DTO_type_output_returns_expe Assert.Single(code); } - [Fact] - public void When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code() - { - // Arrange - var document = CreateDocument(); - - // Act - var settings = new CSharpClientGeneratorSettings(); - settings.CSharpGeneratorSettings.JsonLibrary = NJsonSchema.CodeGeneration.CSharp.CSharpJsonLibrary.SystemTextJson; - - var generator = new CSharpClientGenerator(document, settings); - var code = generator.GenerateFile(); - - // Assert - Assert.Contains("new System.Text.Json.JsonSerializerOptions()", code); - } - [Fact] public void When_generating_CSharp_code_with_multiple_client_types_output_returns_expected_items() { @@ -175,7 +158,24 @@ public void When_generating_CSharp_code_with_multiple_DTO_types_output_returns_e Assert.Equal(2, code.Count()); } - [Fact] + [Fact] + public void When_generating_CSharp_code_with_SystemTextJson_then_output_contains_expected_code() + { + // Arrange + var document = CreateDocument(); + + // Act + var settings = new CSharpClientGeneratorSettings(); + settings.CSharpGeneratorSettings.JsonLibrary = NJsonSchema.CodeGeneration.CSharp.CSharpJsonLibrary.SystemTextJson; + + var generator = new CSharpClientGenerator(document, settings); + var code = generator.GenerateFile(); + + // Assert + Assert.Contains("new System.Text.Json.JsonSerializerOptions()", code); + } + + [Fact] public void When_generating_CSharp_code_with_SystemTextJson_and_JsonSerializerSettingsTransformationMethod_then_output_contains_expected_code() { // Arrange diff --git a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs index d2708366e7..33b03c85b1 100644 --- a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs +++ b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs @@ -10,10 +10,14 @@ namespace NSwag.CodeGeneration { + /// The generated file. public class CodeGenerationArtifact { + /// Name of generated file. public string Name { get; } + /// Type of generated file. public CodeArtifactType Type { get; } + /// The generated code. 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 index 45cdb25f86..cdce20394d 100644 --- a/src/NSwag.CodeGeneration/CodeGenerationResult.cs +++ b/src/NSwag.CodeGeneration/CodeGenerationResult.cs @@ -11,9 +11,13 @@ 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/Result.cs b/src/NSwag.CodeGeneration/Result.cs index 067cb2b9f6..6bab9c8c04 100644 --- a/src/NSwag.CodeGeneration/Result.cs +++ b/src/NSwag.CodeGeneration/Result.cs @@ -8,9 +8,13 @@ namespace NSwag.CodeGeneration { + /// Indicates whether a code generation attempt has been successful. public enum Result { - SUCCESS, - FAILURE + /// Code generation was a success. + Success, + + /// Code generation was a failure. + Failure } } \ No newline at end of file From 3cbeae48d8ad3b41c1225a5b48ffc96d2346e193 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sun, 6 Nov 2022 13:51:44 +0000 Subject: [PATCH 12/42] Began adding option to generate multiple files to NSwagStudio project --- .../OpenApiToCSharpClientCommand.cs | 8 ++ .../GenerationStyleConverter.cs | 52 ++++++++ .../SwaggerToCSharpClientGeneratorView.xaml | 117 ++++++++++-------- 3 files changed, 123 insertions(+), 54 deletions(-) create mode 100644 src/NSwag.Commands/GenerationStyleConverter.cs diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 3b63b53603..1849e025a5 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -13,6 +13,7 @@ using NConsole; using NSwag.CodeGeneration; using NSwag.CodeGeneration.CSharp; +using NSwag.Commands.Commands.CodeGeneration; #pragma warning disable 1591 @@ -108,6 +109,13 @@ public bool WrapDtoExceptions set { Settings.WrapDtoExceptions = value; } } + [Argument(Name = "GenerationStyle", IsRequired = false, Description = "The operation generation mode ('SingleClientFromOperationId' or 'MultipleClientsFromPathSegments').")] + public CSharpGenerationStyle GenerationStyle + { + get { return GenerationStyleConverter.GetOperationGenerationMode(Settings.OperationNameGenerator); } + set { Settings.GenerationStyle = OperationGenerationModeConverter.GetOperationNameGenerator(value); } + } + [Argument(Name = "UseHttpClientCreationMethod", IsRequired = false, Description = "Specifies whether to call CreateHttpClientAsync on the base class to create a new HttpClient.")] public bool UseHttpClientCreationMethod { diff --git a/src/NSwag.Commands/GenerationStyleConverter.cs b/src/NSwag.Commands/GenerationStyleConverter.cs new file mode 100644 index 0000000000..da2c0394cc --- /dev/null +++ b/src/NSwag.Commands/GenerationStyleConverter.cs @@ -0,0 +1,52 @@ +using NSwag.Commands.Commands.CodeGeneration; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NSwag.Commands +{ + internal class GenerationStyleNameConverter + { + internal static CSharpGenerationStyle GetGenerationStyle(IOperationNameGenerator operationNameGenerator) + { + if (operationNameGenerator is MultipleClientsFromOperationIdOperationNameGenerator) + { + return OperationGenerationMode.MultipleClientsFromOperationId; + } + + if (operationNameGenerator is MultipleClientsFromPathSegmentsOperationNameGenerator) + { + return OperationGenerationMode.MultipleClientsFromPathSegments; + } + + if (operationNameGenerator is MultipleClientsFromFirstTagAndPathSegmentsOperationNameGenerator) + { + return OperationGenerationMode.MultipleClientsFromFirstTagAndPathSegments; + } + + if (operationNameGenerator is MultipleClientsFromFirstTagAndOperationIdGenerator) + { + return OperationGenerationMode.MultipleClientsFromFirstTagAndOperationId; + } + + if (operationNameGenerator is MultipleClientsFromFirstTagAndOperationNameGenerator) + { + return OperationGenerationMode.MultipleClientsFromFirstTagAndOperationName; + } + + if (operationNameGenerator is SingleClientFromOperationIdOperationNameGenerator) + { + return OperationGenerationMode.SingleClientFromOperationId; + } + + if (operationNameGenerator is SingleClientFromPathSegmentsOperationNameGenerator) + { + return OperationGenerationMode.SingleClientFromPathSegments; + } + + return OperationGenerationMode.MultipleClientsFromOperationId; + } + } +} diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 45857730b0..af58988c81 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -1,7 +1,7 @@  @@ -25,7 +25,7 @@ - @@ -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,21 +213,21 @@ - - - - @@ -279,14 +288,14 @@ From 41e716682a2f9647c7673745777638a432d07467 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sun, 6 Nov 2022 14:41:15 +0000 Subject: [PATCH 13/42] Added new dropdown to the SwaggerToCSharpClientGeneratorView --- .../Models/CSharpClientGenerationStyle.cs | 4 +- .../OpenApiToCSharpClientCommand.cs | 10 ++-- .../GenerationStyleConverter.cs | 52 ------------------- ...SwaggerToCSharpClientGeneratorViewModel.cs | 5 ++ .../SwaggerToCSharpClientGeneratorView.xaml | 2 +- 5 files changed, 12 insertions(+), 61 deletions(-) delete mode 100644 src/NSwag.Commands/GenerationStyleConverter.cs diff --git a/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs b/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs index 874a0b7b75..09579ec11f 100644 --- a/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs +++ b/src/NSwag.CodeGeneration.CSharp/Models/CSharpClientGenerationStyle.cs @@ -10,9 +10,9 @@ namespace NSwag.CodeGeneration.CSharp.Models public enum CSharpClientGenerationStyle { /// Output a single file. - Single, + SingleFile, /// Output one file per type. - Multiple + OneFilePerType } } diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 1849e025a5..dff17bf3fc 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -13,9 +13,7 @@ using NConsole; using NSwag.CodeGeneration; using NSwag.CodeGeneration.CSharp; -using NSwag.Commands.Commands.CodeGeneration; - -#pragma warning disable 1591 +using NSwag.CodeGeneration.CSharp.Models; namespace NSwag.Commands.CodeGeneration { @@ -110,10 +108,10 @@ public bool WrapDtoExceptions } [Argument(Name = "GenerationStyle", IsRequired = false, Description = "The operation generation mode ('SingleClientFromOperationId' or 'MultipleClientsFromPathSegments').")] - public CSharpGenerationStyle GenerationStyle + public CSharpClientGenerationStyle GenerationStyle { - get { return GenerationStyleConverter.GetOperationGenerationMode(Settings.OperationNameGenerator); } - set { Settings.GenerationStyle = OperationGenerationModeConverter.GetOperationNameGenerator(value); } + 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.")] diff --git a/src/NSwag.Commands/GenerationStyleConverter.cs b/src/NSwag.Commands/GenerationStyleConverter.cs deleted file mode 100644 index da2c0394cc..0000000000 --- a/src/NSwag.Commands/GenerationStyleConverter.cs +++ /dev/null @@ -1,52 +0,0 @@ -using NSwag.Commands.Commands.CodeGeneration; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace NSwag.Commands -{ - internal class GenerationStyleNameConverter - { - internal static CSharpGenerationStyle GetGenerationStyle(IOperationNameGenerator operationNameGenerator) - { - if (operationNameGenerator is MultipleClientsFromOperationIdOperationNameGenerator) - { - return OperationGenerationMode.MultipleClientsFromOperationId; - } - - if (operationNameGenerator is MultipleClientsFromPathSegmentsOperationNameGenerator) - { - return OperationGenerationMode.MultipleClientsFromPathSegments; - } - - if (operationNameGenerator is MultipleClientsFromFirstTagAndPathSegmentsOperationNameGenerator) - { - return OperationGenerationMode.MultipleClientsFromFirstTagAndPathSegments; - } - - if (operationNameGenerator is MultipleClientsFromFirstTagAndOperationIdGenerator) - { - return OperationGenerationMode.MultipleClientsFromFirstTagAndOperationId; - } - - if (operationNameGenerator is MultipleClientsFromFirstTagAndOperationNameGenerator) - { - return OperationGenerationMode.MultipleClientsFromFirstTagAndOperationName; - } - - if (operationNameGenerator is SingleClientFromOperationIdOperationNameGenerator) - { - return OperationGenerationMode.SingleClientFromOperationId; - } - - if (operationNameGenerator is SingleClientFromPathSegmentsOperationNameGenerator) - { - return OperationGenerationMode.SingleClientFromPathSegments; - } - - return OperationGenerationMode.MultipleClientsFromOperationId; - } - } -} diff --git a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs index dd41cbda6b..976fdb6bba 100644 --- a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs +++ b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs @@ -11,6 +11,7 @@ using NJsonSchema.CodeGeneration.CSharp; using NSwag.Commands; using NSwag.Commands.CodeGeneration; +using NSwag.CodeGeneration.CSharp.Models; namespace NSwagStudio.ViewModels.CodeGenerators { @@ -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/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index af58988c81..cff0da651e 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -85,7 +85,7 @@ + ItemsSource="{Binding GenerationStyles}" Margin="0,0,0,12" /> From 72572db25a4ec5e41f5dd60f908ccacfd94134c0 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sun, 6 Nov 2022 15:19:41 +0000 Subject: [PATCH 14/42] Added functionality to GenerationStyle dropdown. --- .../OpenApiToCSharpClientCommand.cs | 17 ++++++++++++++--- .../SwaggerToCSharpClientGeneratorViewModel.cs | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index dff17bf3fc..3f2eccf1dd 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -273,10 +273,21 @@ public async Task> RunAsync() return result; } - return new Dictionary + if (Settings.GenerationStyle == CSharpClientGenerationStyle.OneFilePerType) { - { OutputFilePath ?? "Full", clientGenerator.GenerateFile(ClientGeneratorOutputType.Full) } - }; + var returnValue = new Dictionary(); + var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); + foreach (var artifact in genResult.artifacts) + { + returnValue.Add(OutputFilePath ?? "Full", artifact.Code); + } + return returnValue; + } + + return new Dictionary + { + { OutputFilePath ?? "Full", clientGenerator.GenerateFile(ClientGeneratorOutputType.Full) } + }; } private void GenerateImplementation(Dictionary result, CSharpClientGenerator clientGenerator) diff --git a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs index 976fdb6bba..5e00db01a9 100644 --- a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs +++ b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs @@ -18,7 +18,7 @@ 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 From bdc2de806a049f76b89b11e79ab6b52a5d121dba Mon Sep 17 00:00:00 2001 From: andrewhallmark Date: Tue, 8 Nov 2022 09:59:56 +0000 Subject: [PATCH 15/42] Correction to copy/paste bug in XML comment Rename of variables to aid readability Rename of tests to clarify what is tested --- .../CodeGenerationTests.cs | 200 +++++++++--------- .../ClientGeneratorBase.cs | 108 +++++----- 2 files changed, 152 insertions(+), 156 deletions(-) diff --git a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs index 097c766e7e..718e4e5aad 100644 --- a/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs +++ b/src/NSwag.CodeGeneration.Tests/CodeGenerationTests.cs @@ -1,18 +1,16 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Runtime; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Xml.Linq; -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 @@ -39,124 +37,124 @@ 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(); + [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"; + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; - var generator = new CSharpClientGenerator(document, settings); + 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(); + [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"; + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; + settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; - var generator = new CSharpClientGenerator(document, settings); - var result = generator.GenerateDTOFiles(emptyArtifactList, ClientGeneratorOutputType.Full); + var generator = new CSharpClientGenerator(document, settings); + var result = generator.GenerateDTOFiles(emptyArtifactList, ClientGeneratorOutputType.Full); // Assert - Assert.Empty(result); - } + Assert.Empty(result); + } - [Fact] - public void When_generating_CSharp_code_with_single_client_type_output_returns_expected_items() - { + [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" }; + // Act + var settings = new CSharpClientGeneratorSettings { ClassName = "MyClass" }; var template = settings.CodeGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Controller", new object()); - settings.CSharpGeneratorSettings.Namespace = "MyNamespace"; + 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); + 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_expected_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); - IEnumerable artifactList = new List() { sampleArtifact }; - var code = generator.GenerateDTOFiles(artifactList, ClientGeneratorOutputType.Full); - - // Assert - Assert.Single(code); - } - - [Fact] - public void When_generating_CSharp_code_with_multiple_client_types_output_returns_expected_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); + } + + [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_multiple_DTO_types_output_returns_expected_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/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index 6038ad6656..a066911322 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -6,13 +6,11 @@ // Rico Suter, mail@rsuter.com //----------------------------------------------------------------------- -using System.Collections.Generic; -using System.Linq; -using System.Net.Http.Headers; using NJsonSchema; using NJsonSchema.CodeGeneration; using NSwag.CodeGeneration.Models; -using Parlot.Fluent; +using System.Collections.Generic; +using System.Linq; namespace NSwag.CodeGeneration { @@ -101,19 +99,19 @@ public string GenerateFile(ClientGeneratorOutputType outputType) /// The code. protected abstract string GenerateFile(IEnumerable clientTypes, IEnumerable dtoTypes, ClientGeneratorOutputType outputType); - /// 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. + /// 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(); + /// 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() : @@ -131,7 +129,7 @@ public CodeGenerationResult GenerateFiles(ClientGeneratorOutputType outputType) CodeGenerationResult genResult = new(); - var clientFileList = GenerateClientFiles(clientTypes, outputType); + var clientFileList = GenerateClientFiles(clientTypes, outputType); var dtoFileList = GenerateDTOFiles(dtoTypes, outputType); List artifactList = new(); @@ -140,52 +138,52 @@ public CodeGenerationResult GenerateFiles(ClientGeneratorOutputType outputType) genResult.artifacts = artifactList; - return genResult; - } + return genResult; + } - /// Generates files for all the needed client types. + /// 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) + /// Type of the output. + /// A list of files. + internal IEnumerable GenerateClientFiles(IEnumerable clientTypes, ClientGeneratorOutputType outputType) { List clientFileList = new(); - foreach (var clientType in clientTypes) - { - IEnumerable type = new List() { clientType }; - IEnumerable emptyList = Enumerable.Empty(); - CodeGenerationArtifact artifact = new() - { - Code = GenerateFile(type, emptyList, outputType) - }; - clientFileList.Add(artifact); - } + foreach (var clientType in clientTypes) + { + IEnumerable listWithClientTypeToGenerate = new List() { clientType }; + IEnumerable emptyDtoTypeList = Enumerable.Empty(); + CodeGenerationArtifact artifact = new() + { + Code = GenerateFile(listWithClientTypeToGenerate, emptyDtoTypeList, outputType) + }; + clientFileList.Add(artifact); + } return clientFileList; - } - - /// Generates files for all the needed DTO types. - /// List of client types - /// Type of the output. - /// A list of files. - internal IEnumerable GenerateDTOFiles(IEnumerable dtoTypes, ClientGeneratorOutputType outputType) - { + } + + /// 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 type = new List() { dtoType }; - IEnumerable emptyList = Enumerable.Empty(); - CodeGenerationArtifact artifact = new() - { - Code = GenerateFile(emptyList, type, outputType) - }; - dtoFileList.Add(artifact); - } + foreach (var dtoType in dtoTypes) + { + IEnumerable listWithDtoTypeToGenerate = new List() { dtoType }; + IEnumerable emptyClientTypeList = Enumerable.Empty(); + CodeGenerationArtifact artifact = new() + { + Code = GenerateFile(emptyClientTypeList, listWithDtoTypeToGenerate, outputType) + }; + dtoFileList.Add(artifact); + } return dtoFileList; - } + } - /// Generates the client types. - /// The code artifact collection. - protected virtual IEnumerable GenerateAllClientTypes() + /// Generates the client types. + /// The code artifact collection. + protected virtual IEnumerable GenerateAllClientTypes() { var operations = GetOperations(_document); var clientTypes = new List(); From ad3496d94f37caf1591001c511835adb0aaa669d Mon Sep 17 00:00:00 2001 From: andrewhallmark Date: Tue, 8 Nov 2022 11:20:19 +0000 Subject: [PATCH 16/42] Changed CodeGenerationArtifact to expose more information from the artifact that it is intended to represent --- .../ClientGeneratorBase.cs | 4 +- .../CodeGenerationArtifact.cs | 41 ++++++++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index a066911322..b4c4d3e29e 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -152,7 +152,7 @@ internal IEnumerable GenerateClientFiles(IEnumerable listWithClientTypeToGenerate = new List() { clientType }; IEnumerable emptyDtoTypeList = Enumerable.Empty(); - CodeGenerationArtifact artifact = new() + CodeGenerationArtifact artifact = new(clientType) { Code = GenerateFile(listWithClientTypeToGenerate, emptyDtoTypeList, outputType) }; @@ -172,7 +172,7 @@ internal IEnumerable GenerateDTOFiles(IEnumerable listWithDtoTypeToGenerate = new List() { dtoType }; IEnumerable emptyClientTypeList = Enumerable.Empty(); - CodeGenerationArtifact artifact = new() + CodeGenerationArtifact artifact = new(dtoType) { Code = GenerateFile(emptyClientTypeList, listWithDtoTypeToGenerate, outputType) }; diff --git a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs index 33b03c85b1..35357370c0 100644 --- a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs +++ b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs @@ -10,14 +10,43 @@ namespace NSwag.CodeGeneration { - /// The generated file. + /// An output from the multi-file generation process. public class CodeGenerationArtifact { - /// Name of generated file. - public string Name { get; } - /// Type of generated file. - public CodeArtifactType Type { get; } - /// The generated code. + 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 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 From 79ef7e78a4202f13769be2d43bd356599da412ee Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sat, 12 Nov 2022 17:02:06 +0000 Subject: [PATCH 17/42] Added abstract method for getting file names from a code artifact, and implemented that into the GenerateFiles method --- src/NSwag.CodeGeneration/ClientGeneratorBase.cs | 14 +++++++++++--- src/NSwag.CodeGeneration/CodeGenerationArtifact.cs | 5 +++++ .../CodeGeneration/OpenApiToCSharpClientCommand.cs | 3 ++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index b4c4d3e29e..141693bc27 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -99,9 +99,16 @@ public string GenerateFile(ClientGeneratorOutputType outputType) /// The code. protected abstract string GenerateFile(IEnumerable clientTypes, IEnumerable dtoTypes, ClientGeneratorOutputType outputType); - /// Generates multiple files containing all the needed types. - /// The code. - public CodeGenerationResult GenerateFiles() + /// + /// 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); } @@ -154,6 +161,7 @@ internal IEnumerable GenerateClientFiles(IEnumerable emptyDtoTypeList = Enumerable.Empty(); CodeGenerationArtifact artifact = new(clientType) { + FileName = GetOutputFileName(clientType), Code = GenerateFile(listWithClientTypeToGenerate, emptyDtoTypeList, outputType) }; clientFileList.Add(artifact); diff --git a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs index 35357370c0..f1d44c866f 100644 --- a/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs +++ b/src/NSwag.CodeGeneration/CodeGenerationArtifact.cs @@ -29,6 +29,11 @@ public CodeGenerationArtifact(CodeArtifact sourceArtifact) /// 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 /// diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 3f2eccf1dd..acf391bdea 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -277,9 +277,10 @@ public async Task> RunAsync() { var returnValue = new Dictionary(); var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); + var fileName = string.Empty; foreach (var artifact in genResult.artifacts) { - returnValue.Add(OutputFilePath ?? "Full", artifact.Code); + returnValue.Add(OutputFilePath + artifact.FileName ?? "Full" + artifact.TypeName, artifact.Code); } return returnValue; } From 927435f2bc69712254aff0da6a8102589c609264 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sat, 12 Nov 2022 17:38:16 +0000 Subject: [PATCH 18/42] Began fixing error where multi-file generation does not work. --- .../CSharpClientGenerator.cs | 10 ++++++++++ .../CSharpControllerGenerator.cs | 20 ++++++++++++++----- .../TypeScriptClientGenerator.cs | 12 ++++++++++- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs b/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs index 32c07f2155..d55d36b5d0 100644 --- a/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs +++ b/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs @@ -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/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.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 From ce893c3a33e3b316bc7ae74a966cafb2e582d876 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Sun, 13 Nov 2022 15:16:30 +0000 Subject: [PATCH 19/42] Continued process of making GenerateFiles work in NSwagStudio --- .../StyleTypeToVisibilityConverter.cs | 24 +++++++++++++++++++ .../SwaggerToCSharpClientGeneratorView.xaml | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs diff --git a/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs new file mode 100644 index 0000000000..8649c930f5 --- /dev/null +++ b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs @@ -0,0 +1,24 @@ +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) + { + if (value.Equals(parameter)) + { + 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/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index cff0da651e..f4bf1544e3 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -21,6 +21,7 @@ + @@ -285,7 +286,7 @@ - + Date: Sun, 13 Nov 2022 16:46:09 +0000 Subject: [PATCH 20/42] Altered the default Output panel's visibility to be hidden when the generation style is SingleFile --- .../Converters/StyleTypeToVisibilityConverter.cs | 11 ++++++++--- .../SwaggerToCSharpClientGeneratorView.xaml | 10 ++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs index 8649c930f5..506876b732 100644 --- a/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs +++ b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs @@ -1,4 +1,5 @@ -using System; +using NSwag.CodeGeneration.CSharp.Models; +using System; using System.Globalization; using System.Windows; using System.Windows.Data; @@ -9,11 +10,15 @@ public class StyleTypeToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value.Equals(parameter)) + CSharpClientGenerationStyle style = (CSharpClientGenerationStyle)value; + CSharpClientGenerationStyle target; + Enum.TryParse((string)parameter, out target); + + if (style.Equals(target)) { return Visibility.Visible; } - return Visibility.Collapsed; + return Visibility.Hidden; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index f4bf1544e3..373425cfa0 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -1,7 +1,7 @@  @@ -21,7 +22,8 @@ - + + @@ -286,7 +288,7 @@ - + Date: Sun, 13 Nov 2022 18:32:22 +0000 Subject: [PATCH 21/42] Started attempting to implement a directory picker dialog --- .../StyleTypeToVisibilityConverter.cs | 5 ++-- src/NSwagStudio/NSwagStudio.csproj | 3 ++- .../SwaggerToCSharpClientGeneratorView.xaml | 26 +++++++++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs index 506876b732..42ab8e3d97 100644 --- a/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs +++ b/src/NSwagStudio/Converters/StyleTypeToVisibilityConverter.cs @@ -11,14 +11,13 @@ public class StyleTypeToVisibilityConverter : IValueConverter public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { CSharpClientGenerationStyle style = (CSharpClientGenerationStyle)value; - CSharpClientGenerationStyle target; - Enum.TryParse((string)parameter, out target); + Enum.TryParse((string)parameter, out CSharpClientGenerationStyle target); if (style.Equals(target)) { return Visibility.Visible; } - return Visibility.Hidden; + return Visibility.Collapsed; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/src/NSwagStudio/NSwagStudio.csproj b/src/NSwagStudio/NSwagStudio.csproj index 36270ef3ea..a1cc7911b6 100644 --- a/src/NSwagStudio/NSwagStudio.csproj +++ b/src/NSwagStudio/NSwagStudio.csproj @@ -29,12 +29,12 @@ - + @@ -69,6 +69,7 @@ + diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 373425cfa0..0bce43d2fc 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -12,7 +12,8 @@ xmlns:dialogs="clr-namespace:MyToolkit.Dialogs;assembly=MyToolkit.Extended" xmlns:codeGenerators="clr-namespace:NSwagStudio.Views.CodeGenerators" xmlns:views="clr-namespace:NSwagStudio.Views.CodeGenerators.Views" - xmlns:csharpGeneration="clr-namespace:NSwag.CodeGeneration.CSharp.Models;assembly=NSwag.CodeGeneration.CSharp" + xmlns:csharpGeneration="clr-namespace:NSwag.CodeGeneration.CSharp.Models;assembly=NSwag.CodeGeneration.CSharp" + xmlns:ookiiDialog="clr-namespace:Ookii.Dialogs.Wpf;assembly=Ookii.Dialogs.Wpf" mc:Ignorable="d" d:DesignHeight="800" d:DesignWidth="800"> @@ -287,7 +288,7 @@ - + + + + + + + + + + + + + + + + From f584e59823fa1b3911440db2bc41d23e71d6e4e3 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sat, 19 Nov 2022 14:57:04 +0000 Subject: [PATCH 22/42] Fixed usings issues in MainWindowModel, got NSwagStudio running and working again. --- src/NSwagStudio/NSwagStudio.csproj | 3 +- src/NSwagStudio/ViewModels/MainWindowModel.cs | 17 +- .../SwaggerToCSharpClientGeneratorView.xaml | 27 +- src/UpgradeLog2.htm | 330 ++++++++++++++++++ 4 files changed, 343 insertions(+), 34 deletions(-) create mode 100644 src/UpgradeLog2.htm diff --git a/src/NSwagStudio/NSwagStudio.csproj b/src/NSwagStudio/NSwagStudio.csproj index a1cc7911b6..2d708a8c1f 100644 --- a/src/NSwagStudio/NSwagStudio.csproj +++ b/src/NSwagStudio/NSwagStudio.csproj @@ -30,11 +30,12 @@ + - + diff --git a/src/NSwagStudio/ViewModels/MainWindowModel.cs b/src/NSwagStudio/ViewModels/MainWindowModel.cs index 1b356addbc..c1b08dede1 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 { @@ -198,7 +197,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 +215,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) @@ -251,7 +250,7 @@ private async Task SaveAsDocumentAsync(DocumentModel document) 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 0bce43d2fc..87d66f3edb 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -1,7 +1,7 @@  @@ -308,27 +308,6 @@ - - - - - - - - - - - - - - - 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 From 18a69c1d54e81e0c0a16c700ed3bf840915965b9 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sat, 19 Nov 2022 15:38:54 +0000 Subject: [PATCH 23/42] Finished implementing multi-file generation in NSwagStudio. OneFilePerType now works, provided the file selected in NSwagStudio has a one letter name. --- .../OpenApiToCSharpClientCommand.cs | 9 +++++-- src/NSwagStudio/ViewModels/MainWindowModel.cs | 24 +++++++++++-------- .../SwaggerToCSharpClientGeneratorView.xaml | 3 +-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index acf391bdea..5d215a0735 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -277,10 +277,15 @@ public async Task> RunAsync() { var returnValue = new Dictionary(); var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); - var fileName = string.Empty; + OutputFilePath = OutputFilePath.Substring(0, OutputFilePath.Length-4); + Console.WriteLine(OutputFilePath); + Console.WriteLine("Generating files"); foreach (var artifact in genResult.artifacts) { - returnValue.Add(OutputFilePath + artifact.FileName ?? "Full" + artifact.TypeName, artifact.Code); + if (artifact.FileName != null) + { + returnValue.Add(OutputFilePath + artifact.FileName ?? "Full" + artifact.TypeName, artifact.Code); + } } return returnValue; } diff --git a/src/NSwagStudio/ViewModels/MainWindowModel.cs b/src/NSwagStudio/ViewModels/MainWindowModel.cs index c1b08dede1..37fae3218b 100644 --- a/src/NSwagStudio/ViewModels/MainWindowModel.cs +++ b/src/NSwagStudio/ViewModels/MainWindowModel.cs @@ -68,7 +68,7 @@ public DocumentModel SelectedDocument public AsyncRelayCommand OpenDocumentCommand { get; } public AsyncRelayCommand CloseDocumentCommand { get; } - + public AsyncRelayCommand> CloseAllDocumentsCommand { get; } public AsyncRelayCommand SaveDocumentCommand { get; } @@ -132,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) @@ -243,10 +245,12 @@ 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; diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 87d66f3edb..629e1f5692 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -24,7 +24,6 @@ -
@@ -289,7 +288,7 @@ - + Date: Sat, 19 Nov 2022 17:32:27 +0000 Subject: [PATCH 24/42] Added missing call to GetOutputFileName to GenerateDTOTypes, NSwagStudios now generates all files. --- src/NSwag.CodeGeneration/ClientGeneratorBase.cs | 1 + .../CodeGeneration/OpenApiToCSharpClientCommand.cs | 7 +------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs index 141693bc27..f99daf3dd9 100644 --- a/src/NSwag.CodeGeneration/ClientGeneratorBase.cs +++ b/src/NSwag.CodeGeneration/ClientGeneratorBase.cs @@ -182,6 +182,7 @@ internal IEnumerable GenerateDTOFiles(IEnumerable emptyClientTypeList = Enumerable.Empty(); CodeGenerationArtifact artifact = new(dtoType) { + FileName = GetOutputFileName(dtoType), Code = GenerateFile(emptyClientTypeList, listWithDtoTypeToGenerate, outputType) }; dtoFileList.Add(artifact); diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 5d215a0735..96b746cd87 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -278,14 +278,9 @@ public async Task> RunAsync() var returnValue = new Dictionary(); var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); OutputFilePath = OutputFilePath.Substring(0, OutputFilePath.Length-4); - Console.WriteLine(OutputFilePath); - Console.WriteLine("Generating files"); foreach (var artifact in genResult.artifacts) { - if (artifact.FileName != null) - { - returnValue.Add(OutputFilePath + artifact.FileName ?? "Full" + artifact.TypeName, artifact.Code); - } + returnValue.Add(OutputFilePath + artifact.FileName ?? ("Full" + artifact.TypeName), artifact.Code); } return returnValue; } From 0a8c7c1ee5a3824d772c327de7a597aa23ad3d69 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sun, 20 Nov 2022 14:32:30 +0000 Subject: [PATCH 25/42] Interfaces now generate in a seperate sub-folder, and are preceded with 'I' --- .../CodeGeneration/OpenApiToCSharpClientCommand.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 96b746cd87..c2a242f067 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -278,9 +278,19 @@ public async Task> RunAsync() var returnValue = new Dictionary(); var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); OutputFilePath = OutputFilePath.Substring(0, OutputFilePath.Length-4); + string InterfaceOutputFilePath = OutputFilePath + "Interfaces\\"; + string currentOutputFilePath = ""; + string FileName = ""; foreach (var artifact in genResult.artifacts) { - returnValue.Add(OutputFilePath + artifact.FileName ?? ("Full" + artifact.TypeName), artifact.Code); + FileName = artifact.FileName; + currentOutputFilePath = OutputFilePath; + if (artifact.Code.Contains("partial interface")) + { + currentOutputFilePath = InterfaceOutputFilePath; + FileName = "I" + FileName; + } + returnValue.Add(currentOutputFilePath + FileName ?? ("Full" + artifact.TypeName), artifact.Code); } return returnValue; } From e30a1f1178a71f97a40b07a0cd7910ec217e9e96 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sun, 20 Nov 2022 15:42:43 +0000 Subject: [PATCH 26/42] Implemented attempt to sort generated files into subfolders based on which interfaces they're used in. --- .../OpenApiToCSharpClientCommand.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index c2a242f067..b5c6e32145 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -281,6 +281,10 @@ public async Task> RunAsync() string InterfaceOutputFilePath = OutputFilePath + "Interfaces\\"; string currentOutputFilePath = ""; string FileName = ""; + int interfacesContain; + CodeGenerationArtifact containedIn = null; + List interfaceList = new List(); + Dictionary interfaceFiles = new Dictionary(); foreach (var artifact in genResult.artifacts) { FileName = artifact.FileName; @@ -289,6 +293,28 @@ public async Task> RunAsync() { currentOutputFilePath = InterfaceOutputFilePath; FileName = "I" + FileName; + interfaceList.Add(artifact); + interfaceFiles.Add(artifact, OutputFilePath + "Models\\"+ artifact.TypeName + "\\"); + } + else + { + interfacesContain = 0; + foreach (var intArtifact in interfaceList) + { + if (intArtifact.Code.Contains("<" + artifact.TypeName + ">")) + { + containedIn = intArtifact; + interfacesContain += 1; + } + } + if (interfacesContain == 1) + { + interfaceFiles.TryGetValue(containedIn, out currentOutputFilePath); + } + else + { + currentOutputFilePath = OutputFilePath + "Models\\"; + } } returnValue.Add(currentOutputFilePath + FileName ?? ("Full" + artifact.TypeName), artifact.Code); } From 1a831c387c51822e45424511c8a0bf0a04ef0291 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Sun, 20 Nov 2022 16:13:03 +0000 Subject: [PATCH 27/42] Added seperation of generated Exception files into their own subfolder. --- .../CodeGeneration/OpenApiToCSharpClientCommand.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index b5c6e32145..3c17678cd1 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -296,18 +296,25 @@ public async Task> RunAsync() interfaceList.Add(artifact); interfaceFiles.Add(artifact, OutputFilePath + "Models\\"+ artifact.TypeName + "\\"); } + else if (artifact.Code.Contains(": Exception")) + { + currentOutputFilePath = OutputFilePath + "Exceptions\\"; + } else { interfacesContain = 0; foreach (var intArtifact in interfaceList) { - if (intArtifact.Code.Contains("<" + artifact.TypeName + ">")) + if (intArtifact.Code.Contains(artifact.TypeName)) { - containedIn = intArtifact; + if (interfacesContain == 0) + { + containedIn = intArtifact; + } interfacesContain += 1; } } - if (interfacesContain == 1) + if (interfacesContain >= 1) { interfaceFiles.TryGetValue(containedIn, out currentOutputFilePath); } From b9f0edfc4939d432d6c85aa284fbb92614ff1990 Mon Sep 17 00:00:00 2001 From: andrewhallmark <46025270+TheCakeMonster@users.noreply.github.com> Date: Wed, 23 Nov 2022 13:29:09 +0000 Subject: [PATCH 28/42] Based decision on type using enum for that purpose Split path based on separator, not length --- .../OpenApiToCSharpClientCommand.cs | 677 +++++++++--------- 1 file changed, 339 insertions(+), 338 deletions(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 3c17678cd1..0e5f006833 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -6,349 +6,350 @@ // Rico Suter, mail@rsuter.com //----------------------------------------------------------------------- -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; 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; 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 = "GenerationStyle", IsRequired = false, Description = "The operation generation mode ('SingleClientFromOperationId' or 'MultipleClientsFromPathSegments').")] - 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 (GenerateContractsOutput) - { - var result = new Dictionary(); - GenerateContracts(result, clientGenerator); - GenerateImplementation(result, clientGenerator); - return result; - } - - if (Settings.GenerationStyle == CSharpClientGenerationStyle.OneFilePerType) - { - var returnValue = new Dictionary(); - var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); - OutputFilePath = OutputFilePath.Substring(0, OutputFilePath.Length-4); - string InterfaceOutputFilePath = OutputFilePath + "Interfaces\\"; - string currentOutputFilePath = ""; - string FileName = ""; - int interfacesContain; - CodeGenerationArtifact containedIn = null; - List interfaceList = new List(); - Dictionary interfaceFiles = new Dictionary(); - foreach (var artifact in genResult.artifacts) - { - FileName = artifact.FileName; - currentOutputFilePath = OutputFilePath; - if (artifact.Code.Contains("partial interface")) - { - currentOutputFilePath = InterfaceOutputFilePath; - FileName = "I" + FileName; - interfaceList.Add(artifact); - interfaceFiles.Add(artifact, OutputFilePath + "Models\\"+ artifact.TypeName + "\\"); - } - else if (artifact.Code.Contains(": Exception")) - { - currentOutputFilePath = OutputFilePath + "Exceptions\\"; - } - else - { - interfacesContain = 0; - foreach (var intArtifact in interfaceList) - { - if (intArtifact.Code.Contains(artifact.TypeName)) - { - if (interfacesContain == 0) - { - containedIn = intArtifact; - } - interfacesContain += 1; - } - } - if (interfacesContain >= 1) - { - interfaceFiles.TryGetValue(containedIn, out currentOutputFilePath); - } - else - { - currentOutputFilePath = OutputFilePath + "Models\\"; - } - } - returnValue.Add(currentOutputFilePath + FileName ?? ("Full" + artifact.TypeName), artifact.Code); - } - return returnValue; - } - - 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 ('SingleClientFromOperationId' or 'MultipleClientsFromPathSegments').")] + 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 (GenerateContractsOutput) + { + var result = new Dictionary(); + GenerateContracts(result, clientGenerator); + GenerateImplementation(result, clientGenerator); + return result; + } + + if (Settings.GenerationStyle == CSharpClientGenerationStyle.OneFilePerType) + { + var returnValue = new Dictionary(); + var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); + var lastPathSeparatorIndex = OutputFilePath.LastIndexOf(@"\"); + OutputFilePath = OutputFilePath.Substring(0, lastPathSeparatorIndex + 1); + string interfaceOutputFilePath = OutputFilePath + "Interfaces\\"; + string fileName; + int interfacesFound; + CodeGenerationArtifact containedIn = null; + List interfaceList = new List(); + Dictionary interfaceFiles = new Dictionary(); + foreach (var artifact in genResult.artifacts) + { + fileName = artifact.FileName; + string currentOutputFilePath = OutputFilePath; + if (artifact.Type == CodeArtifactType.Interface) + { + currentOutputFilePath = interfaceOutputFilePath; + fileName = "I" + fileName; + interfaceList.Add(artifact); + interfaceFiles.Add(artifact, OutputFilePath + "Models\\" + artifact.TypeName + "\\"); + } + else if (artifact.Code.Contains(": Exception")) + { + currentOutputFilePath = OutputFilePath + "Exceptions\\"; + } + else + { + interfacesFound = 0; + foreach (var intArtifact in interfaceList) + { + if (intArtifact.Code.Contains(artifact.TypeName)) + { + if (interfacesFound == 0) + { + containedIn = intArtifact; + } + interfacesFound += 1; + } + } + if (interfacesFound >= 1) + { + interfaceFiles.TryGetValue(containedIn, out currentOutputFilePath); + } + else + { + currentOutputFilePath = OutputFilePath + "Models\\"; + } + } + returnValue.Add(currentOutputFilePath + fileName ?? ("Full" + artifact.TypeName), artifact.Code); + } + return returnValue; + } + + 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; + } + } } From adc72ea3f2bb7f2d5df21546d66f64519ba62d11 Mon Sep 17 00:00:00 2001 From: andrewhallmark <46025270+TheCakeMonster@users.noreply.github.com> Date: Wed, 23 Nov 2022 14:21:43 +0000 Subject: [PATCH 29/42] Move our multi-file implementation eariler, so that it does not get bypassed if contracts are generated --- .../OpenApiToCSharpClientCommand.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 0e5f006833..29c60c66cc 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -266,14 +266,6 @@ 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; - } - if (Settings.GenerationStyle == CSharpClientGenerationStyle.OneFilePerType) { var returnValue = new Dictionary(); @@ -329,6 +321,14 @@ public async Task> RunAsync() 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) } From dd4305793b0401ffba26ec0c4d342f58a491146b Mon Sep 17 00:00:00 2001 From: andrewhallmark <46025270+TheCakeMonster@users.noreply.github.com> Date: Wed, 23 Nov 2022 15:05:02 +0000 Subject: [PATCH 30/42] Exception folder is created manually; no need to do this here --- .../Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 29c60c66cc..53b14a73dc 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -289,10 +289,6 @@ public async Task> RunAsync() interfaceList.Add(artifact); interfaceFiles.Add(artifact, OutputFilePath + "Models\\" + artifact.TypeName + "\\"); } - else if (artifact.Code.Contains(": Exception")) - { - currentOutputFilePath = OutputFilePath + "Exceptions\\"; - } else { interfacesFound = 0; From 1353da735cba87c7bab95a07ea93bd24ef7d95e5 Mon Sep 17 00:00:00 2001 From: "Harvey Lorna (2021) ZKAC197" Date: Sat, 26 Nov 2022 16:49:03 +0000 Subject: [PATCH 31/42] Fixed interface generation so generated interfaces now actually has the CodeArtifactType Interface. Removed unnecessary folder sorting method in OpenApiToCSharpClientCommand. --- .../CSharpClientGenerator.cs | 2 +- .../OpenApiToCSharpClientCommand.cs | 27 +------------------ 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs b/src/NSwag.CodeGeneration.CSharp/CSharpClientGenerator.cs index d55d36b5d0..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); diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 53b14a73dc..de6cd8f233 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -274,10 +274,6 @@ public async Task> RunAsync() OutputFilePath = OutputFilePath.Substring(0, lastPathSeparatorIndex + 1); string interfaceOutputFilePath = OutputFilePath + "Interfaces\\"; string fileName; - int interfacesFound; - CodeGenerationArtifact containedIn = null; - List interfaceList = new List(); - Dictionary interfaceFiles = new Dictionary(); foreach (var artifact in genResult.artifacts) { fileName = artifact.FileName; @@ -286,31 +282,10 @@ public async Task> RunAsync() { currentOutputFilePath = interfaceOutputFilePath; fileName = "I" + fileName; - interfaceList.Add(artifact); - interfaceFiles.Add(artifact, OutputFilePath + "Models\\" + artifact.TypeName + "\\"); } else { - interfacesFound = 0; - foreach (var intArtifact in interfaceList) - { - if (intArtifact.Code.Contains(artifact.TypeName)) - { - if (interfacesFound == 0) - { - containedIn = intArtifact; - } - interfacesFound += 1; - } - } - if (interfacesFound >= 1) - { - interfaceFiles.TryGetValue(containedIn, out currentOutputFilePath); - } - else - { - currentOutputFilePath = OutputFilePath + "Models\\"; - } + currentOutputFilePath = OutputFilePath + "Models\\"; } returnValue.Add(currentOutputFilePath + fileName ?? ("Full" + artifact.TypeName), artifact.Code); } From e7ee92a0b7c6fb055f944d9ff9bbda053c0d4470 Mon Sep 17 00:00:00 2001 From: "Harvey Lorna (2021) ZKAC197" Date: Thu, 22 Dec 2022 14:43:39 +0000 Subject: [PATCH 32/42] Fixed incorrect GenerationStyle description --- .../Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index de6cd8f233..8e3737ee8e 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -108,7 +108,7 @@ public bool WrapDtoExceptions set { Settings.WrapDtoExceptions = value; } } - [Argument(Name = "GenerationStyle", IsRequired = false, Description = "The operation generation mode ('SingleClientFromOperationId' or 'MultipleClientsFromPathSegments').")] + [Argument(Name = "GenerationStyle", IsRequired = false, Description = "The operation generation mode ('SingleFile' or 'OneFilePerType').")] public CSharpClientGenerationStyle GenerationStyle { get { return Settings.GenerationStyle; } From a1ea0ba7231163bbcdbcc564372bd12931345f70 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Fri, 30 Dec 2022 14:06:25 +0000 Subject: [PATCH 33/42] Began implementing folder save dialog --- src/NSwagStudio/Controls/FolderSavePicker.cs | 21 +++++++++++++++++++ .../SwaggerToCSharpClientGeneratorView.xaml | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/NSwagStudio/Controls/FolderSavePicker.cs diff --git a/src/NSwagStudio/Controls/FolderSavePicker.cs b/src/NSwagStudio/Controls/FolderSavePicker.cs new file mode 100644 index 0000000000..c2fea701e9 --- /dev/null +++ b/src/NSwagStudio/Controls/FolderSavePicker.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace NSwagStudio.Controls +{ + public class FolderSavePicker : FilePickerBase + { + protected override void SelectFile() + { + var dlg = new FolderBrowserDialog(); + if (dlg.ShowDialog().ToString() == "OK") + { + FilePath = dlg.SelectedPath; + } + } + } +} diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 629e1f5692..90d4b038dc 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -297,7 +297,7 @@ - From 6547dd79ab1d26661a1abe220f43f9822e7c13a0 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Fri, 30 Dec 2022 15:45:01 +0000 Subject: [PATCH 34/42] Folder picker now works --- .../OpenApiToCSharpClientCommand.cs | 6 ++---- src/NSwagStudio/Controls/FolderSavePicker.cs | 21 ------------------- .../SwaggerToCSharpClientGeneratorView.xaml | 13 ++++++++---- ...SwaggerToCSharpClientGeneratorView.xaml.cs | 11 ++++++++++ 4 files changed, 22 insertions(+), 29 deletions(-) delete mode 100644 src/NSwagStudio/Controls/FolderSavePicker.cs diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs index 8e3737ee8e..9536f27009 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpClientCommand.cs @@ -270,9 +270,7 @@ public async Task> RunAsync() { var returnValue = new Dictionary(); var genResult = clientGenerator.GenerateFiles(ClientGeneratorOutputType.Full); - var lastPathSeparatorIndex = OutputFilePath.LastIndexOf(@"\"); - OutputFilePath = OutputFilePath.Substring(0, lastPathSeparatorIndex + 1); - string interfaceOutputFilePath = OutputFilePath + "Interfaces\\"; + string interfaceOutputFilePath = OutputFilePath + "\\Interfaces\\"; string fileName; foreach (var artifact in genResult.artifacts) { @@ -285,7 +283,7 @@ public async Task> RunAsync() } else { - currentOutputFilePath = OutputFilePath + "Models\\"; + currentOutputFilePath = OutputFilePath + "\\Models\\"; } returnValue.Add(currentOutputFilePath + fileName ?? ("Full" + artifact.TypeName), artifact.Code); } diff --git a/src/NSwagStudio/Controls/FolderSavePicker.cs b/src/NSwagStudio/Controls/FolderSavePicker.cs deleted file mode 100644 index c2fea701e9..0000000000 --- a/src/NSwagStudio/Controls/FolderSavePicker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace NSwagStudio.Controls -{ - public class FolderSavePicker : FilePickerBase - { - protected override void SelectFile() - { - var dlg = new FolderBrowserDialog(); - if (dlg.ShowDialog().ToString() == "OK") - { - FilePath = dlg.SelectedPath; - } - } - } -} diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 90d4b038dc..a9cfd64386 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -14,8 +14,7 @@ xmlns:views="clr-namespace:NSwagStudio.Views.CodeGenerators.Views" xmlns:csharpGeneration="clr-namespace:NSwag.CodeGeneration.CSharp.Models;assembly=NSwag.CodeGeneration.CSharp" xmlns:ookiiDialog="clr-namespace:Ookii.Dialogs.Wpf;assembly=Ookii.Dialogs.Wpf" - mc:Ignorable="d" - d:DesignHeight="800" d:DesignWidth="800"> + mc:Ignorable="d" d:DesignWidth="800" Height="4328"> @@ -26,7 +25,7 @@ - + - + + + + + + diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs index cda8d7b608..ce5b716d25 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,15 @@ public override bool IsSelected } } } + + public void FolderPicker(object sender, RoutedEventArgs x) + { + System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + var result = folderBrowserDialog.ShowDialog(); + if (result.ToString() != string.Empty) + { + path.Text = folderBrowserDialog.SelectedPath; + } + } } } From 147a9a45e83661b28b09dd3ee4754144c4bd2f9a Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Fri, 30 Dec 2022 17:03:28 +0000 Subject: [PATCH 35/42] Folder picker only appears when OneFilePerTyper is selected. --- .../SwaggerToCSharpClientGeneratorView.xaml | 21 +++++++++++-------- ...SwaggerToCSharpClientGeneratorView.xaml.cs | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index a9cfd64386..a6f29eff0a 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -14,7 +14,7 @@ xmlns:views="clr-namespace:NSwagStudio.Views.CodeGenerators.Views" xmlns:csharpGeneration="clr-namespace:NSwag.CodeGeneration.CSharp.Models;assembly=NSwag.CodeGeneration.CSharp" xmlns:ookiiDialog="clr-namespace:Ookii.Dialogs.Wpf;assembly=Ookii.Dialogs.Wpf" - mc:Ignorable="d" d:DesignWidth="800" Height="4328"> + mc:Ignorable="d" d:DesignWidth="800" Height="4248"> @@ -286,7 +286,7 @@ - + - - - - - - - + + + + + + + + + + diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs index ce5b716d25..0cd515a976 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs @@ -46,7 +46,7 @@ public override bool IsSelected public void FolderPicker(object sender, RoutedEventArgs x) { - System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); + System.Windows.Forms.FolderBrowserDialog folderBrowserDialog = new(); var result = folderBrowserDialog.ShowDialog(); if (result.ToString() != string.Empty) { From 3328ab949959adae1d12815277515918999627a5 Mon Sep 17 00:00:00 2001 From: Lorna Harvey Date: Fri, 30 Dec 2022 17:30:02 +0000 Subject: [PATCH 36/42] Added temporary text box to make sure that folder file path is actually working --- .../Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index a6f29eff0a..ca573cbb36 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -309,6 +309,7 @@ + < /TextBox> From a441ccbd768d2515c765bc1a13a9a04321a85afa Mon Sep 17 00:00:00 2001 From: andrewhallmark <46025270+TheCakeMonster@users.noreply.github.com> Date: Wed, 4 Jan 2023 14:07:47 +0000 Subject: [PATCH 37/42] Fix build failure caused by whitespace --- .../CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index ca573cbb36..0a21071d78 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -309,7 +309,7 @@ - < /TextBox> + From 2f802a0a4a7c4ca7d66a1cd28f778c5d05eae885 Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Wed, 10 May 2023 10:36:51 +0100 Subject: [PATCH 38/42] Fixed bug where folder file path would not update --- .../CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 0a21071d78..cc85345950 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -309,7 +309,7 @@ - + From b1796a8f81649b7a3570a2a47ce08ad3348e658b Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Wed, 10 May 2023 10:38:33 +0100 Subject: [PATCH 39/42] Removed duplicate filepath text box --- .../CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index cc85345950..c706b0a443 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -308,8 +308,7 @@ - - + From 977098c4c5a54840b7f49247700acb9c10a0356b Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Wed, 10 May 2023 10:44:07 +0100 Subject: [PATCH 40/42] Changed the UpdateSourceTrigger on all text inputs in CSharp Client view to PropertyChanged --- .../SwaggerToCSharpClientGeneratorView.xaml | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index c706b0a443..358bfe36ec 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -35,14 +35,14 @@ - - @@ -55,14 +55,14 @@ - - @@ -76,7 +76,7 @@ - @@ -132,7 +132,7 @@ - + @@ -244,20 +244,20 @@ - + - + - + - + @@ -272,7 +272,7 @@ - @@ -280,7 +280,7 @@ - @@ -290,14 +290,14 @@ From e7d2d1bf0c45fd3f43a2d13103d37bfb9d07267c Mon Sep 17 00:00:00 2001 From: geckogeckogecko Date: Tue, 13 Jun 2023 10:20:47 +0100 Subject: [PATCH 41/42] Added folder picker to template directory field --- .../SwaggerToCSharpClientGeneratorView.xaml | 5 ++--- .../SwaggerToCSharpClientGeneratorView.xaml.cs | 10 ++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 358bfe36ec..0792bbf88d 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -280,9 +280,8 @@ - + + diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs index 0cd515a976..4da60a3f90 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml.cs @@ -53,5 +53,15 @@ public void FolderPicker(object sender, RoutedEventArgs x) 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; + } + } } } From 57a7386bd104591583ccd206b5f106b5224756ed Mon Sep 17 00:00:00 2001 From: andrewhallmark <46025270+TheCakeMonster@users.noreply.github.com> Date: Mon, 3 Jul 2023 11:57:55 +0100 Subject: [PATCH 42/42] Removed unused namespaces --- .../CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml index 0792bbf88d..15017f045c 100644 --- a/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/SwaggerToCSharpClientGeneratorView.xaml @@ -12,8 +12,6 @@ xmlns:dialogs="clr-namespace:MyToolkit.Dialogs;assembly=MyToolkit.Extended" xmlns:codeGenerators="clr-namespace:NSwagStudio.Views.CodeGenerators" xmlns:views="clr-namespace:NSwagStudio.Views.CodeGenerators.Views" - xmlns:csharpGeneration="clr-namespace:NSwag.CodeGeneration.CSharp.Models;assembly=NSwag.CodeGeneration.CSharp" - xmlns:ookiiDialog="clr-namespace:Ookii.Dialogs.Wpf;assembly=Ookii.Dialogs.Wpf" mc:Ignorable="d" d:DesignWidth="800" Height="4248">