Skip to content

Commit e27700c

Browse files
authored
[csharp-netcore] Support .NET Core 3.0/3.1 and .NET Standard 2.1 (#5111)
* Add .NET Core 3.x / .NET Standard 2.1 * Fixed test project target framework * Fixed missing sync property * Update generator docs
1 parent 8214460 commit e27700c

4 files changed

Lines changed: 34 additions & 17 deletions

File tree

docs/generators/csharp-netcore.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ sidebar_label: csharp-netcore
2525
|returnICollection|Return ICollection<T> instead of the concrete type.| |false|
2626
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
2727
|sourceFolder|source folder for generated code| |src|
28-
|targetFramework|The target .NET framework version.|<dl><dt>**netstandard1.3**</dt><dd>.NET Standard 1.3 compatible</dd><dt>**netstandard1.4**</dt><dd>.NET Standard 1.4 compatible</dd><dt>**netstandard1.5**</dt><dd>.NET Standard 1.5 compatible</dd><dt>**netstandard1.6**</dt><dd>.NET Standard 1.6 compatible</dd><dt>**netstandard2.0**</dt><dd>.NET Standard 2.0 compatible</dd><dt>**netcoreapp2.0**</dt><dd>.NET Core 2.0 compatible</dd><dl>|netstandard2.0|
28+
|targetFramework|The target .NET framework version.|<dl><dt>**netstandard1.3**</dt><dd>.NET Standard 1.3 compatible</dd><dt>**netstandard1.4**</dt><dd>.NET Standard 1.4 compatible</dd><dt>**netstandard1.5**</dt><dd>.NET Standard 1.5 compatible</dd><dt>**netstandard1.6**</dt><dd>.NET Standard 1.6 compatible</dd><dt>**netstandard2.0**</dt><dd>.NET Standard 2.0 compatible</dd><dt>**netstandard2.1**</dt><dd>.NET Standard 2.1 compatible</dd><dt>**netcoreapp2.0**</dt><dd>.NET Core 2.0 compatible</dd><dt>**netcoreapp2.1**</dt><dd>.NET Core 2.1 compatible</dd><dt>**netcoreapp3.0**</dt><dd>.NET Core 3.0 compatible</dd><dt>**netcoreapp3.1**</dt><dd>.NET Core 3.1 compatible</dd><dl>|netstandard2.0|
2929
|useCollection|Deserialize array types to Collection&lt;T&gt; instead of List&lt;T&gt;.| |false|
3030
|useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false|
3131
|validatable|Generates self-validatable models.| |true|

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

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ public class CSharpNetCoreClientCodegen extends AbstractCSharpCodegen {
5656
FrameworkStrategy.NETSTANDARD_1_5,
5757
FrameworkStrategy.NETSTANDARD_1_6,
5858
FrameworkStrategy.NETSTANDARD_2_0,
59-
FrameworkStrategy.NETCOREAPP_2_0
59+
FrameworkStrategy.NETSTANDARD_2_1,
60+
FrameworkStrategy.NETCOREAPP_2_0,
61+
FrameworkStrategy.NETCOREAPP_2_1,
62+
FrameworkStrategy.NETCOREAPP_3_0,
63+
FrameworkStrategy.NETCOREAPP_3_1
6064
);
6165
private static FrameworkStrategy defaultFramework = FrameworkStrategy.NETSTANDARD_2_0;
6266
protected final Map<String, String> frameworks;
@@ -67,6 +71,7 @@ public class CSharpNetCoreClientCodegen extends AbstractCSharpCodegen {
6771

6872
// Defines TargetFrameworkVersion in csproj files
6973
protected String targetFramework = defaultFramework.name;
74+
protected String testTargetFramework = defaultFramework.testTargetFramework;
7075

7176
// Defines nuget identifiers for target framework
7277
protected String targetFrameworkNuget = targetFramework;
@@ -548,6 +553,7 @@ public void processOpts() {
548553

549554
setTargetFrameworkNuget(strategy.getNugetFrameworkIdentifier());
550555
setTargetFramework(strategy.name);
556+
setTestTargetFramework(strategy.testTargetFramework);
551557

552558
if (strategy != FrameworkStrategy.NETSTANDARD_2_0) {
553559
LOGGER.warn("If using built-in templates-RestSharp only supports netstandard 2.0 or later.");
@@ -571,6 +577,7 @@ public void processOpts() {
571577
syncStringProperty(additionalProperties, CodegenConstants.MODEL_PACKAGE, this::setModelPackage, modelPackage);
572578
syncStringProperty(additionalProperties, CodegenConstants.OPTIONAL_PROJECT_GUID, this::setPackageGuid, packageGuid);
573579
syncStringProperty(additionalProperties, "targetFrameworkNuget", this::setTargetFrameworkNuget, this.targetFrameworkNuget);
580+
syncStringProperty(additionalProperties, "testTargetFramework", this::setTestTargetFramework, this.testTargetFramework);
574581

575582
syncBooleanProperty(additionalProperties, "netStandard", this::setNetStandard, this.netStandard);
576583

@@ -702,6 +709,10 @@ public void setTargetFramework(String dotnetFramework) {
702709
LOGGER.info("Generating code for .NET Framework " + this.targetFramework);
703710
}
704711

712+
public void setTestTargetFramework(String testTargetFramework) {
713+
this.testTargetFramework = testTargetFramework;
714+
}
715+
705716
public void setTargetFrameworkNuget(String targetFrameworkNuget) {
706717
this.targetFrameworkNuget = targetFrameworkNuget;
707718
}
@@ -854,34 +865,41 @@ private void syncStringProperty(final Map<String, Object> additionalProperties,
854865
// https://docs.microsoft.com/en-us/dotnet/standard/net-standard
855866
@SuppressWarnings("Duplicates")
856867
private static abstract class FrameworkStrategy {
857-
static FrameworkStrategy NETSTANDARD_1_3 = new FrameworkStrategy("netstandard1.3", ".NET Standard 1.3 compatible", "v4.6.1") {
868+
static FrameworkStrategy NETSTANDARD_1_3 = new FrameworkStrategy("netstandard1.3", ".NET Standard 1.3 compatible", "netcoreapp2.0") {
858869
};
859-
static FrameworkStrategy NETSTANDARD_1_4 = new FrameworkStrategy("netstandard1.4", ".NET Standard 1.4 compatible", "v4.6.1") {
870+
static FrameworkStrategy NETSTANDARD_1_4 = new FrameworkStrategy("netstandard1.4", ".NET Standard 1.4 compatible", "netcoreapp2.0") {
860871
};
861-
static FrameworkStrategy NETSTANDARD_1_5 = new FrameworkStrategy("netstandard1.5", ".NET Standard 1.5 compatible", "v4.6.1") {
872+
static FrameworkStrategy NETSTANDARD_1_5 = new FrameworkStrategy("netstandard1.5", ".NET Standard 1.5 compatible", "netcoreapp2.0") {
862873
};
863-
static FrameworkStrategy NETSTANDARD_1_6 = new FrameworkStrategy("netstandard1.6", ".NET Standard 1.6 compatible", "v4.6.1") {
874+
static FrameworkStrategy NETSTANDARD_1_6 = new FrameworkStrategy("netstandard1.6", ".NET Standard 1.6 compatible", "netcoreapp2.0") {
864875
};
865-
static FrameworkStrategy NETSTANDARD_2_0 = new FrameworkStrategy("netstandard2.0", ".NET Standard 2.0 compatible", "v4.6.1") {
876+
static FrameworkStrategy NETSTANDARD_2_0 = new FrameworkStrategy("netstandard2.0", ".NET Standard 2.0 compatible", "netcoreapp2.0") {
866877
};
867-
static FrameworkStrategy NETCOREAPP_2_0 = new FrameworkStrategy("netcoreapp2.0", ".NET Core 2.0 compatible", "v4.6.1", Boolean.FALSE) {
868-
878+
static FrameworkStrategy NETSTANDARD_2_1 = new FrameworkStrategy("netstandard2.1", ".NET Standard 2.1 compatible", "netcoreapp3.0") {
879+
};
880+
static FrameworkStrategy NETCOREAPP_2_0 = new FrameworkStrategy("netcoreapp2.0", ".NET Core 2.0 compatible", "netcoreapp2.0", Boolean.FALSE) {
881+
};
882+
static FrameworkStrategy NETCOREAPP_2_1 = new FrameworkStrategy("netcoreapp2.1", ".NET Core 2.1 compatible", "netcoreapp2.1", Boolean.FALSE) {
883+
};
884+
static FrameworkStrategy NETCOREAPP_3_0 = new FrameworkStrategy("netcoreapp3.0", ".NET Core 3.0 compatible", "netcoreapp3.0", Boolean.FALSE) {
885+
};
886+
static FrameworkStrategy NETCOREAPP_3_1 = new FrameworkStrategy("netcoreapp3.1", ".NET Core 3.1 compatible", "netcoreapp3.1", Boolean.FALSE) {
869887
};
870888
protected String name;
871889
protected String description;
872-
protected String dotNetFrameworkVersion;
890+
protected String testTargetFramework;
873891
private Boolean isNetStandard = Boolean.TRUE;
874892

875-
FrameworkStrategy(String name, String description, String dotNetFrameworkVersion) {
893+
FrameworkStrategy(String name, String description, String testTargetFramework) {
876894
this.name = name;
877895
this.description = description;
878-
this.dotNetFrameworkVersion = dotNetFrameworkVersion;
896+
this.testTargetFramework = testTargetFramework;
879897
}
880898

881-
FrameworkStrategy(String name, String description, String dotNetFrameworkVersion, Boolean isNetStandard) {
899+
FrameworkStrategy(String name, String description, String testTargetFramework, Boolean isNetStandard) {
882900
this.name = name;
883901
this.description = description;
884-
this.dotNetFrameworkVersion = dotNetFrameworkVersion;
902+
this.testTargetFramework = testTargetFramework;
885903
this.isNetStandard = isNetStandard;
886904
}
887905

modules/openapi-generator/src/main/resources/csharp-netcore/TestProject.mustache

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
<AppDesignerFolder>Properties</AppDesignerFolder>
1818
<RootNamespace>{{testPackageName}}</RootNamespace>
1919
<AssemblyName>{{testPackageName}}</AssemblyName>
20-
<!-- By Microsoft design, test project can only be netcoreapp2.0 (even if main project is .netstandard -->
21-
<TargetFramework>netcoreapp2.0</TargetFramework>
20+
<TargetFramework>{{testTargetFramework}}</TargetFramework>
2221
<IsPackable>false</IsPackable>
2322
<FileAlignment>512</FileAlignment>
2423
</PropertyGroup>

modules/openapi-generator/src/main/resources/csharp-netcore/netcore_testproject.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
1414
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
1515
<RootNamespace>{{testPackageName}}</RootNamespace>
16-
<TargetFramework>netcoreapp2.0</TargetFramework>
16+
<TargetFramework>{{testTargetFramework}}</TargetFramework>
1717
<IsPackable>false</IsPackable>
1818
</PropertyGroup>
1919

0 commit comments

Comments
 (0)