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}}