Skip to content

Commit 55292dd

Browse files
authored
Add ASP.NET Core 5.0 support (#8717)
* add aspnet core 5.0 support * skip overwriting Org.OpenAPITools.csproj * update doc * update doc
1 parent 135c8f4 commit 55292dd

File tree

37 files changed

+3984
-8
lines changed

37 files changed

+3984
-8
lines changed

appveyor.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ install:
3535
- ps: Install-Module Pester -Force -Scope CurrentUser
3636
build_script:
3737
- dotnet --info
38+
# build C# aspnetcore 5.0 server
39+
- dotnet build samples\server\petstore\aspnetcore-5.0\Org.OpenAPITools.sln
3840
# build C# aspnetcore 3.1 server
3941
- dotnet build samples\server\petstore\aspnetcore-3.1\Org.OpenAPITools.sln
4042
# build C# aspnetcore 3.0 server

bin/configs/aspnetcore-5.0.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
generatorName: aspnetcore
2+
outputDir: samples/server/petstore/aspnetcore-5.0
3+
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
4+
templateDir: modules/openapi-generator/src/main/resources/aspnetcore/3.0
5+
additionalProperties:
6+
packageGuid: '{3C799344-F285-4669-8FD5-7ED9B795D5C5}'
7+
aspnetCoreVersion: "5.0"

docs/generators/aspnetcore.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
77

88
| Option | Description | Values | Default |
99
| ------ | ----------- | ------ | ------- |
10-
|aspnetCoreVersion|ASP.NET Core version: 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)| |3.1|
10+
|aspnetCoreVersion|ASP.NET Core version: 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)| |3.1|
1111
|buildTarget|Target to build an application or library| |program|
1212
|classModifier|Class Modifier for controller classes: Empty string or abstract.| ||
1313
|compatibilityVersion|ASP.Net Core CompatibilityVersion| |Version_2_2|

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
4848
public static final String GENERATE_BODY = "generateBody";
4949
public static final String BUILD_TARGET = "buildTarget";
5050
public static final String MODEL_CLASS_MODIFIER = "modelClassModifier";
51+
public static final String TARGET_FRAMEWORK= "targetFramework";
5152

5253
public static final String PROJECT_SDK = "projectSdk";
5354
public static final String SDK_WEB = "Microsoft.NET.Sdk.Web";
@@ -68,7 +69,7 @@ public class AspNetCoreServerCodegen extends AbstractCSharpCodegen {
6869
protected int serverPort = 8080;
6970
protected String serverHost = "0.0.0.0";
7071
protected CliOption swashbuckleVersion = new CliOption(SWASHBUCKLE_VERSION, "Swashbuckle version: 3.0.0, 4.0.0, 5.0.0");
71-
protected CliOption aspnetCoreVersion = new CliOption(ASPNET_CORE_VERSION, "ASP.NET Core version: 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)");
72+
protected CliOption aspnetCoreVersion = new CliOption(ASPNET_CORE_VERSION, "ASP.NET Core version: 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)");
7273
private CliOption classModifier = new CliOption(CLASS_MODIFIER, "Class Modifier for controller classes: Empty string or abstract.");
7374
private CliOption operationModifier = new CliOption(OPERATION_MODIFIER, "Operation Modifier can be virtual or abstract");
7475
private CliOption modelClassModifier = new CliOption(MODEL_CLASS_MODIFIER, "Model Class Modifier can be nothing or partial");
@@ -123,7 +124,7 @@ public AspNetCoreServerCodegen() {
123124
modelTemplateFiles.put("model.mustache", ".cs");
124125
apiTemplateFiles.put("controller.mustache", ".cs");
125126

126-
embeddedTemplateDir = templateDir = "aspnetcore/2.1";
127+
embeddedTemplateDir = templateDir = "aspnetcore/3.0";
127128

128129
// contextually reserved words
129130
// NOTE: C# uses camel cased reserved words, while models are title cased. We don't want lowercase comparisons.
@@ -190,6 +191,7 @@ public AspNetCoreServerCodegen() {
190191
aspnetCoreVersion.addEnum("2.2", "ASP.NET Core 2.2");
191192
aspnetCoreVersion.addEnum("3.0", "ASP.NET Core 3.0");
192193
aspnetCoreVersion.addEnum("3.1", "ASP.NET Core 3.1");
194+
aspnetCoreVersion.addEnum("5.0", "ASP.NET Core 5.0");
193195
aspnetCoreVersion.setDefault("3.1");
194196
aspnetCoreVersion.setOptValue(aspnetCoreVersion.getDefault());
195197
addOption(aspnetCoreVersion.getOpt(), aspnetCoreVersion.getDescription(), aspnetCoreVersion.getOptValue());
@@ -367,7 +369,7 @@ public void processOpts() {
367369
supportingFiles.add(new SupportingFile("gitignore", packageFolder, ".gitignore"));
368370
supportingFiles.add(new SupportingFile("validateModel.mustache", packageFolder + File.separator + "Attributes", "ValidateModelStateAttribute.cs"));
369371
supportingFiles.add(new SupportingFile("typeConverter.mustache", packageFolder + File.separator + "Converters", "CustomEnumConverter.cs"));
370-
if (aspnetCoreVersion.getOptValue().startsWith("3.")) {
372+
if (aspnetCoreVersion.getOptValue().startsWith("3.") || aspnetCoreVersion.getOptValue().startsWith("5.0")) {
371373
supportingFiles.add(new SupportingFile("OpenApi" + File.separator + "TypeExtensions.mustache", packageFolder + File.separator + "OpenApi", "TypeExtensions.cs"));
372374
}
373375
supportingFiles.add(new SupportingFile("Project.csproj.mustache", packageFolder, packageName + ".csproj"));
@@ -535,7 +537,7 @@ private void setBuildTarget() {
535537
private void setAspnetCoreVersion(String packageFolder) {
536538
setCliOption(aspnetCoreVersion);
537539

538-
if (aspnetCoreVersion.getOptValue().startsWith("3.")) {
540+
if (aspnetCoreVersion.getOptValue().startsWith("3.") || aspnetCoreVersion.getOptValue().startsWith("5.0")) {
539541
compatibilityVersion = null;
540542
} else if ("2.0".equals(aspnetCoreVersion.getOptValue())) {
541543
compatibilityVersion = null;
@@ -552,6 +554,7 @@ private void setAspnetCoreVersion(String packageFolder) {
552554

553555
private String determineTemplateVersion(String frameworkVersion) {
554556
switch (frameworkVersion) {
557+
case "5.0":
555558
case "3.1":
556559
return "3.0";
557560

@@ -593,17 +596,25 @@ private void setIsFramework() {
593596
LOGGER.warn("ASP.NET core version is " + aspnetCoreVersion.getOptValue() + " so changing to use frameworkReference instead of packageReference ");
594597
useFrameworkReference = true;
595598
additionalProperties.put(USE_FRAMEWORK_REFERENCE, useFrameworkReference);
599+
additionalProperties.put(TARGET_FRAMEWORK, "netcoreapp" + aspnetCoreVersion);
600+
} else if (aspnetCoreVersion.getOptValue().startsWith("5.")) {// default, do nothing
601+
LOGGER.warn("ASP.NET core version is " + aspnetCoreVersion.getOptValue() + " so changing to use frameworkReference instead of packageReference ");
602+
useFrameworkReference = true;
603+
additionalProperties.put(USE_FRAMEWORK_REFERENCE, useFrameworkReference);
604+
additionalProperties.put(TARGET_FRAMEWORK, "net5.0");
596605
} else {
597606
if (additionalProperties.containsKey(USE_FRAMEWORK_REFERENCE)) {
598607
useFrameworkReference = convertPropertyToBooleanAndWriteBack(USE_FRAMEWORK_REFERENCE);
599608
} else {
600609
additionalProperties.put(USE_FRAMEWORK_REFERENCE, useFrameworkReference);
601610
}
611+
additionalProperties.put(TARGET_FRAMEWORK, "netcoreapp" + aspnetCoreVersion);
602612
}
603613
}
604614

605615
private void setUseNewtonsoft() {
606616
if (aspnetCoreVersion.getOptValue().startsWith("2.")) {
617+
LOGGER.warn("ASP.NET core version 2.X support has been deprecated. Please use ASP.NET core version 3.1 instead");
607618
LOGGER.warn("ASP.NET core version is " + aspnetCoreVersion.getOptValue() + " so staying on default json library.");
608619
useNewtonsoft = false;
609620
additionalProperties.put(USE_NEWTONSOFT, useNewtonsoft);
@@ -617,7 +628,7 @@ private void setUseNewtonsoft() {
617628
}
618629

619630
private void setUseEndpointRouting() {
620-
if (aspnetCoreVersion.getOptValue().startsWith("3.")) {
631+
if (aspnetCoreVersion.getOptValue().startsWith("3.") || aspnetCoreVersion.getOptValue().startsWith("5.")) {
621632
LOGGER.warn("ASP.NET core version is " + aspnetCoreVersion.getOptValue() + " so switching to old style endpoint routing.");
622633
useDefaultRouting = false;
623634
additionalProperties.put(USE_DEFAULT_ROUTING, useDefaultRouting);
@@ -633,7 +644,7 @@ private void setUseEndpointRouting() {
633644
private void setSwashbuckleVersion() {
634645
setCliOption(swashbuckleVersion);
635646

636-
if (aspnetCoreVersion.getOptValue().startsWith("3.")) {
647+
if (aspnetCoreVersion.getOptValue().startsWith("3.") || aspnetCoreVersion.getOptValue().startsWith("5.")) {
637648
LOGGER.warn("ASP.NET core version is " + aspnetCoreVersion.getOptValue() + " so changing default Swashbuckle version to 5.0.0.");
638649
swashbuckleVersion.setOptValue("5.0.0");
639650
additionalProperties.put(SWASHBUCKLE_VERSION, swashbuckleVersion.getOptValue());

modules/openapi-generator/src/main/resources/aspnetcore/3.0/Project.csproj.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<Description>{{packageName}}</Description>
44
<Copyright>{{packageName}}</Copyright>
5-
<TargetFramework>netcoreapp{{aspnetCoreVersion}}</TargetFramework>
5+
<TargetFramework>{{targetFramework}}</TargetFramework>
66
<GenerateDocumentationFile>true</GenerateDocumentationFile>
77
<PreserveCompilationContext>true</PreserveCompilationContext>
88
{{#isLibrary}}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# OpenAPI Generator Ignore
2+
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
3+
4+
# Use this file to prevent files from being overwritten by the generator.
5+
# The patterns follow closely to .gitignore or .dockerignore.
6+
7+
# As an example, the C# client generator defines ApiClient.cs.
8+
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
9+
#ApiClient.cs
10+
11+
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
12+
#foo/*/qux
13+
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
14+
15+
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
16+
#foo/**/qux
17+
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
18+
19+
# You can also negate patterns with an exclamation (!).
20+
# For example, you can ignore all files in a docs folder with the file extension .md:
21+
#docs/*.md
22+
# Then explicitly reverse the ignore rule for a single file:
23+
#!docs/README.md
24+
src/Org.OpenAPITools/Org.OpenAPITools.csproj
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
Org.OpenAPITools.sln
2+
README.md
3+
build.bat
4+
build.sh
5+
src/Org.OpenAPITools/.gitignore
6+
src/Org.OpenAPITools/Attributes/ValidateModelStateAttribute.cs
7+
src/Org.OpenAPITools/Authentication/ApiAuthentication.cs
8+
src/Org.OpenAPITools/Controllers/PetApi.cs
9+
src/Org.OpenAPITools/Controllers/StoreApi.cs
10+
src/Org.OpenAPITools/Controllers/UserApi.cs
11+
src/Org.OpenAPITools/Converters/CustomEnumConverter.cs
12+
src/Org.OpenAPITools/Dockerfile
13+
src/Org.OpenAPITools/Filters/BasePathFilter.cs
14+
src/Org.OpenAPITools/Filters/GeneratePathParamsValidationFilter.cs
15+
src/Org.OpenAPITools/Models/ApiResponse.cs
16+
src/Org.OpenAPITools/Models/Category.cs
17+
src/Org.OpenAPITools/Models/Order.cs
18+
src/Org.OpenAPITools/Models/Pet.cs
19+
src/Org.OpenAPITools/Models/Tag.cs
20+
src/Org.OpenAPITools/Models/User.cs
21+
src/Org.OpenAPITools/OpenApi/TypeExtensions.cs
22+
src/Org.OpenAPITools/Program.cs
23+
src/Org.OpenAPITools/Properties/launchSettings.json
24+
src/Org.OpenAPITools/Startup.cs
25+
src/Org.OpenAPITools/appsettings.json
26+
src/Org.OpenAPITools/wwwroot/README.md
27+
src/Org.OpenAPITools/wwwroot/index.html
28+
src/Org.OpenAPITools/wwwroot/openapi-original.json
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
5.1.0-SNAPSHOT
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.27428.2043
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools", "src\Org.OpenAPITools\Org.OpenAPITools.csproj", "{3C799344-F285-4669-8FD5-7ED9B795D5C5}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{3C799344-F285-4669-8FD5-7ED9B795D5C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{3C799344-F285-4669-8FD5-7ED9B795D5C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{3C799344-F285-4669-8FD5-7ED9B795D5C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{3C799344-F285-4669-8FD5-7ED9B795D5C5}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
EndGlobal
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Org.OpenAPITools - ASP.NET Core 5.0 Server
2+
3+
This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
4+
5+
## Run
6+
7+
Linux/OS X:
8+
9+
```
10+
sh build.sh
11+
```
12+
13+
Windows:
14+
15+
```
16+
build.bat
17+
```
18+
## Run in Docker
19+
20+
```
21+
cd src/Org.OpenAPITools
22+
docker build -t org.openapitools .
23+
docker run -p 5000:8080 org.openapitools
24+
```

0 commit comments

Comments
 (0)