Convert .NET Core 2.0 class libraries to .NET Standard

.Net Core.Net Standard

.Net Core Problem Overview


Is there a way to easily convert a class library targeting .NET Core 2.0 to .NET Standard?

If I understand it correctly, if one wants to maximize the reusability of class libraries in projects targeting different .NET frameworks e.g. .NET Framework, .NET Core, Xamarin, etc., it's a better idea to target .NET Standard -- provided that all the required APIs are available in the version of .NET Standard that will be targeted.

This is the reason why I want to convert my class libraries from .NET Core 2.0 to .NET Standard 1.6 or .NET Standard 2.0.

.Net Core Solutions


Solution 1 - .Net Core

In the project file, you can point target compilation to netstandard with the exact version.

Example of Proj.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>
</Project>
...

Microsoft provides good documentation about targeting types.

Dotnet Standard is not a framework or a library, it is an abstract set of instructions: what functionality should have System.Array, String, List, and so on. Currently, there are different implementations: .NET Framework, .NET Core, Mono, Xamarin, Windows Phone. It means that different implementations can recompile and reuse your library targeting netstandard. It is a very good choice for a NuGet package.

You can play with the versions and find the minimum function set required for your library. Each Dotnet Standard extends the functionality of the previous version. Thus, the less the targeted version is selected the more platforms your library will support.

Solution 2 - .Net Core

You can edit the csproj file (can be done inside VS by right-clicking on the project file) and change

<TargetFramework>netcoreapp2.0</TargetFramework>

to

<TargetFramework>netstandard2.0</TargetFramework>

Solution 3 - .Net Core

  1. Go to Project Folder

  2. Open .csproj file

  3. Replace your Target Framwork

    netcoreapp2.2 TO netstandard2.0

See this picture to more clear

enter image description here

Solution 4 - .Net Core

My five cents on this topic. I had to convert libraries already written in .Net Core 3.1 and 5.0. When you open a solution or add the project to your current .Net Standard solution it won't show the list of .Net Standard options. The reason is you have 2 references to update in order to make it work. First, change the target framework in the .csproj file. For example, to switch to .Net Standard 2.1 I modified the file in the following way:

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
  </PropertyGroup>

Second, change the project type reference in the Solution (.sln file) opening it with any editor or it won't recognize it either. The GUID for .Net Standard 2.1 is 9A19103F-16F7-4668-BE54-9A1E7A4F7556. If you have a different version of standard the trick is adding a new project, check the GUID for the project type and replace it in the solution file.

EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = ...
EndProject

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSamView Question on Stackoverflow
Solution 1 - .Net CoreArtur AView Answer on Stackoverflow
Solution 2 - .Net CoreMartin UllrichView Answer on Stackoverflow
Solution 3 - .Net Corekuldeep chopraView Answer on Stackoverflow
Solution 4 - .Net CoreMaximiliano RiosView Answer on Stackoverflow