[aspnetcore] Added parameter to generate models in a seperate csproj (#13024)

* Added parameter to add models in seperate project

* Update samples

* refactored ELSE
This commit is contained in:
Max K 2022-07-30 09:35:56 +02:00 committed by GitHub
parent 6a3226d004
commit c81a63fd7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 85 additions and 3 deletions

View File

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

View File

@ -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");

View File

@ -0,0 +1,39 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>{{packageDescription}}{{^packageDescription}}{{modelPackage}}{{/packageDescription}}</Description>
<Copyright>{{packageCopyright}}</Copyright>
<Authors>{{packageAuthors}}</Authors>
<TargetFramework>{{targetFramework}}</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<PreserveCompilationContext>true</PreserveCompilationContext>
<Version>{{packageVersion}}</Version>
{{#nullableReferenceTypes}}
<Nullable>annotations</Nullable>
{{/nullableReferenceTypes}}
<OutputType>Library</OutputType>
<AssemblyName>{{modelPackage}}</AssemblyName>
<PackageId>{{modelPackage}}</PackageId>
<UserSecretsId>{{userSecretsGuid}}</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="{{aspnetCoreVersion}}.0"/>
{{#useSwashbuckle}}
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
{{#useNewtonsoft}}
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="{{swashbuckleVersion}}"/>
{{/useNewtonsoft}}
{{^useNewtonsoft}}
<PackageReference Include="Swashbuckle.AspNetCore" Version="{{swashbuckleVersion}}"/>
{{/useNewtonsoft}}
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="{{swashbuckleVersion}}" />
{{/useSwashbuckle}}
{{^useSwashbuckle}}
{{#useNewtonsoft}}
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="{{newtonsoftVersion}}" />
{{/useNewtonsoft}}
{{/useSwashbuckle}}
<PackageReference Include="JsonSubTypes" Version="1.8.0" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
</Project>

View File

@ -20,6 +20,9 @@
<DockerfileContext>..\..</DockerfileContext>
</PropertyGroup>
<ItemGroup>
{{#useSeperateModelProject}}
<ProjectReference Include="../{{modelPackage}}/{{modelPackage}}.csproj"/>
{{/useSeperateModelProject}}
{{#useFrameworkReference}}
{{#isLibrary}}
<FrameworkReference Include="Microsoft.AspNetCore.App" />
@ -28,7 +31,9 @@
{{^useFrameworkReference}}
<PackageReference Include="Microsoft.AspNetCore.App" />
{{/useFrameworkReference}}
{{^useSeperateModelProject}}
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="{{aspnetCoreVersion}}.0"/>
{{/useSeperateModelProject}}
{{#useSwashbuckle}}
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
{{#useNewtonsoft}}