swagger-api / swagger-api/swagger-codegen
[csharp] Differentiate between target framework and target framework version
Nobody has claimed this yet.
- Dominant language
- Mustache
- Stars
- 17.8k
- Forks
- 6k
- PR merge metrics
- No merged PRs in 30d
Description
Description
C# client supports .NET Standard 1.3 under the misnomer of v5.0. We don't yet support .NET Standard 2.0, although it should be a minor upgrade by the IDE to import our generated projects.
v5.0 refers to the PCL version, which is a different project file structure (I hope to fix this issue in the next week or two by separating PCL, netstandard, and .net framework into separate options). This should allow us to clearly differentiate between the TargetFramework and TargetFrameworkVersion mixture we currently have.
For reference, you can create two library projects in Visual Studio, one .NET Standard 1.3 and one "Portable Library" modified from the default 4.0 to 5.0. Project structures differ like this:
$ diff netstandard_1.3/netstandard_1.3/netstandard_1.3.csproj pcl_5.0/pcl_5.0/pcl_5.0.csproj
1,2c1,2
< <Project Sdk="Microsoft.NET.Sdk">
<
---
> <?xml version="1.0" encoding="utf-8"?>
> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
4c4,11
< <TargetFramework>netstandard1.3</TargetFramework>
---
> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
> <ProjectGuid>{435A49DB-F692-4835-BEEF-6473AF3075DB}</ProjectGuid>
> <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
> <OutputType>Library</OutputType>
> <RootNamespace>pcl_5</RootNamespace>
> <AssemblyName>pcl_5.0</AssemblyName>
> <TargetFrameworkVersion>v5.0</TargetFrameworkVersion>
6,7c13,33
<
< </Project>
---
> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
> <DebugSymbols>true</DebugSymbols>
> <DebugType>full</DebugType>
> <Optimize>false</Optimize>
> <OutputPath>bin\Debug</OutputPath>
> <DefineConstants>DEBUG;</DefineConstants>
> <ErrorReport>prompt</ErrorReport>
> <WarningLevel>4</WarningLevel>
> </PropertyGroup>
> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
> <Optimize>true</Optimize>
> <OutputPath>bin\Release</OutputPath>
> <ErrorReport>prompt</ErrorReport>
> <WarningLevel>4</WarningLevel>
> </PropertyGroup>
> <ItemGroup>
> <Compile Include="MyClass.cs" />
> <Compile Include="Properties\AssemblyInfo.cs" />
> </ItemGroup>
> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
> </Project>
\ No newline at end of file
Project files also have different structures, so even our PCL 5.0 generated code currently would require users to manually adjust the project to be truly PCL 5.0 (right now, it's just a .NET Framework library). I think at a minimum, we need to conditionally include the portable msbuild targets and the ProjectTypeGuids option.
.NET Standard 2.0 was just announced back in August. I'd need to evaluate changes for this addition.
Swagger-codegen version
all
Swagger declaration file content or url
Command line used for generation
config-help -l csharp
Steps to reproduce
n\a (enhancement)
Related issues/PRs
Suggest a fix/enhancement
Related to #5527
My suggestion for this work is to differentiate clearly between .NET Framework, netstandard, and PCL versioning.
This may be easiest if we move to support something similar to a library option (e.g. framework). This would allow us to specify framework=dotnet and frameworkVersion=3.5 or framework=netstandard and frameworkVersion=1.3 rather than targetFramework=v3.5 or targetFramework=v5.0.
I don't know that there's that much difference between any of these, so I'm open to suggestions.
It may also be beneficial to sunset support for .net 3.5 and possibly .net 4.0 into separate projects to improve maintainability of the C# client generator.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with config-help -l csharp and inspect the generated C# project files described in the issue. Compare the .NET Standard and PCL structures, including TargetFramework, TargetFrameworkVersion, ProjectTypeGuids, and imported MSBuild targets. Done means the generator clearly separates .NET Framework, .NET Standard, and PCL options and produces the corresponding project structure.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- build-system, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100