How can I change a .NET standard library to a .NET framework library?

C#.Net.Net Standard.Net Framework-Version.Net 4.6

C# Problem Overview


I'm writing a class library for a simple parser in C#. When I first created it, I used .NET standard 2.0, but now I need to migrate it to .NET 4.6 both to conform to the other projects in my solution and in order to use NUnit.

I tried to follow the instructions in the Microsoft documentation, but when I try to select another framework in the properties, I can only find other .NET standard versions.

How can I migrate it? Will I need to manually edit the .csproj file?

C# Solutions


Solution 1 - C#

Open up the project file (.csproj) and change the TargetFramework to net462

<PropertyGroup>
  <TargetFramework>net462</TargetFramework>
</PropertyGroup>

Solution 2 - C#

My personal experience in Visual Studio 2017 is that recreating project and adding existent sources is the simplest, safest and most effective way - because .Net Framework based csproj file has extra xml elements (comparing with Standard based), it seems changing "TargetFramework" is not enough. Below is portion of diffs appeared by default:


enter image description here

Solution 3 - C#

If you are publishing your class library as a Nuget package then there is a better way to set this up. Check out this article:

https://weblog.west-wind.com/posts/2017/Jun/22/MultiTargeting-and-Porting-a-NET-Library-to-NET-Core-20

Basically you can setup your class library for multi targeting, allowing it to be imported into .net core projects as well as different versions of .net frameworks.

Solution 4 - C#

There are a few steps that I did and worked for me:

  1. git push your code, so you have a back up :)

  2. Unload the project in VS (right click on the project and unload)

  3. Edit the project in VS (right click and edit)

  4. Replace the TargetFramework OR/AND TargetFrameworkVersion with <TargetFramework>netcoreapp2.0</TargetFramework>

  5. Change the project line, that's usually the first line (after xml root) to: <Project Sdk="Microsoft.NET.Sdk">

  6. Remove the import that's usually the second line (after the xml root)

  7. Keep your PropertyGroups that describe the build options, if you want (I want mine as are custom)

  8. Remove the references and the file references, they are not needed.

  9. Close the file and reload (right click reload).

  10. Delete the assemblyinfo file (from properties folder) as it is not needed, the assembly version comes now from the proj

  11. Right click on the project and go to properties to see that you don't have any error in proj file. Ensure that you don't have typos or tags that are not close.

  12. Build. If you have dependencies that you are missing then right click and on the project and add them. - I suppose that you don't want to edit them in the proj. Or you can do a dotnet restore or dotnetbulid to add them, as you would like.

Hope this works for you. They seem a lot of steps but they are not that complicated, and this is one time effort.

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
QuestionEdward MinnixView Question on Stackoverflow
Solution 1 - C#JammerView Answer on Stackoverflow
Solution 2 - C#Vlad NovakovskyView Answer on Stackoverflow
Solution 3 - C#MarkoView Answer on Stackoverflow
Solution 4 - C#DanView Answer on Stackoverflow