diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index 52ce459144f..b7f2193194f 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -51,6 +51,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useDefaultRouting|Use default routing for the ASP.NET Core version.| |true| |useFrameworkReference|Use frameworkReference for ASP.NET Core 3.0+ and PackageReference ASP.NET Core 2.2 or earlier.| |false| |useNewtonsoft|Uses the Newtonsoft JSON library.| |true| +|useSeperateModelProject|Create a seperate project for models| |false| |useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |true| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index e9449c75e7a..4ee7821aefa 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -44,6 +44,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { public static final String USE_SWASHBUCKLE = "useSwashbuckle"; public static final String MODEL_POCOMODE = "pocoModels"; + public static final String USE_MODEL_SEPERATEPROJECT = "useSeperateModelProject"; public static final String ASPNET_CORE_VERSION = "aspnetCoreVersion"; public static final String SWASHBUCKLE_VERSION = "swashbuckleVersion"; public static final String CLASS_MODIFIER = "classModifier"; @@ -72,6 +73,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { private boolean useSwashbuckle = true; private boolean pocoModels = false; + private boolean useSeperateModelProject = false; protected int serverPort = 8080; protected String serverHost = "0.0.0.0"; protected CliOption swashbuckleVersion = new CliOption(SWASHBUCKLE_VERSION, "Swashbuckle version: 3.0.0 (deprecated), 4.0.0 (deprecated), 5.0.0 (deprecated), 6.4.0"); @@ -244,6 +246,10 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { "Build POCO Models", pocoModels); + addSwitch(USE_MODEL_SEPERATEPROJECT, + "Create a seperate project for models", + useSeperateModelProject); + addSwitch(IS_LIBRARY, "Is the build a library", isLibrary); @@ -367,6 +373,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { setOperationModifier(); setModelClassModifier(); setPocoModels(); + setUseSeperateModelProject(); setUseSwashbuckle(); setOperationIsAsync(); @@ -393,17 +400,30 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { setIsFramework(); setUseNewtonsoft(); setUseEndpointRouting(); - + supportingFiles.add(new SupportingFile("build.sh.mustache", "", "build.sh")); supportingFiles.add(new SupportingFile("build.bat.mustache", "", "build.bat")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); supportingFiles.add(new SupportingFile("Solution.mustache", "", packageName + ".sln")); supportingFiles.add(new SupportingFile("gitignore", packageFolder, ".gitignore")); supportingFiles.add(new SupportingFile("validateModel.mustache", packageFolder + File.separator + "Attributes", "ValidateModelStateAttribute.cs")); - supportingFiles.add(new SupportingFile("typeConverter.mustache", packageFolder + File.separator + "Converters", "CustomEnumConverter.cs")); + + if (useSeperateModelProject) + { + supportingFiles.add(new SupportingFile("typeConverter.mustache", sourceFolder + File.separator + modelPackage + File.separator + "Converters", "CustomEnumConverter.cs")); + } else { + supportingFiles.add(new SupportingFile("typeConverter.mustache", packageFolder + File.separator + "Converters", "CustomEnumConverter.cs")); + } + if (aspnetCoreVersion.getOptValue().startsWith("3.") || aspnetCoreVersion.getOptValue().startsWith("5.0") || aspnetCoreVersion.getOptValue().startsWith("6.")) { supportingFiles.add(new SupportingFile("OpenApi" + File.separator + "TypeExtensions.mustache", packageFolder + File.separator + "OpenApi", "TypeExtensions.cs")); } + + if (useSeperateModelProject) + { + supportingFiles.add(new SupportingFile("ModelsProject.csproj.mustache", sourceFolder + File.separator + modelPackage, modelPackage + ".csproj")); + } + supportingFiles.add(new SupportingFile("Project.csproj.mustache", packageFolder, packageName + ".csproj")); if (!isLibrary) { supportingFiles.add(new SupportingFile("Dockerfile.mustache", packageFolder, "Dockerfile")); @@ -445,7 +465,12 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { @Override public String modelFileFolder() { - return outputFolder + File.separator + sourceFolder + File.separator + packageName + File.separator + "Models"; + if (!useSeperateModelProject) + { + return outputFolder + File.separator + sourceFolder + File.separator + packageName + File.separator + "Models"; + } else { + return outputFolder + File.separator + sourceFolder + File.separator + modelPackage; + } } @Override @@ -671,6 +696,18 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen { } } + private void setUseSeperateModelProject() { + if (additionalProperties.containsKey(USE_MODEL_SEPERATEPROJECT)) { + useSeperateModelProject = convertPropertyToBooleanAndWriteBack(USE_MODEL_SEPERATEPROJECT); + if (useSeperateModelProject) + { + LOGGER.info("Using seperate model project"); + } + } else { + additionalProperties.put(USE_MODEL_SEPERATEPROJECT, useSeperateModelProject); + } + } + private void setUseSwashbuckle() { if (isLibrary) { LOGGER.warn("isLibrary is true so changing default useSwashbuckle to false"); diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/ModelsProject.csproj.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/ModelsProject.csproj.mustache new file mode 100644 index 00000000000..9810e7389ec --- /dev/null +++ b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/ModelsProject.csproj.mustache @@ -0,0 +1,39 @@ + + + {{packageDescription}}{{^packageDescription}}{{modelPackage}}{{/packageDescription}} + {{packageCopyright}} + {{packageAuthors}} + {{targetFramework}} + true + true + {{packageVersion}} +{{#nullableReferenceTypes}} + annotations +{{/nullableReferenceTypes}} + Library + {{modelPackage}} + {{modelPackage}} + {{userSecretsGuid}} + + + +{{#useSwashbuckle}} + +{{#useNewtonsoft}} + +{{/useNewtonsoft}} +{{^useNewtonsoft}} + +{{/useNewtonsoft}} + +{{/useSwashbuckle}} +{{^useSwashbuckle}} +{{#useNewtonsoft}} + +{{/useNewtonsoft}} +{{/useSwashbuckle}} + + + + + diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache index 889efc0161d..c663a71f5d7 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache @@ -20,6 +20,9 @@ ..\.. +{{#useSeperateModelProject}} + +{{/useSeperateModelProject}} {{#useFrameworkReference}} {{#isLibrary}} @@ -28,7 +31,9 @@ {{^useFrameworkReference}} {{/useFrameworkReference}} +{{^useSeperateModelProject}} +{{/useSeperateModelProject}} {{#useSwashbuckle}} {{#useNewtonsoft}}