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

31,598

Solution 1

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

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

Solution 2

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

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

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.

Share:
31,598
Edward Minnix
Author by

Edward Minnix

Updated on July 09, 2022

Comments

  • Edward Minnix
    Edward Minnix almost 2 years

    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?

  • Andrew___Pls_Support_UA
    Andrew___Pls_Support_UA over 5 years
    This guy is right. There are much more of changes than in accepted answer.
  • Beingnin
    Beingnin over 4 years
    i cant find any csproj file
  • NotImplementedException
    NotImplementedException over 4 years
    Navigate to the folder that contains your project.
  • SendETHToThisAddress
    SendETHToThisAddress about 4 years
    I tried this and the project won't even load up anymore. I get error "The element <#text> beneath element <Project> is unrecognized." can't build either.
  • Frank Monroe
    Frank Monroe almost 4 years
    This is right - do not do as the accepted answer. You may scramble your project and waste a lot of time. IMHE.
  • Trương Quốc Khánh
    Trương Quốc Khánh almost 4 years
    @NithinChandran: unload project, right click project select edit
  • Jeff Whitty
    Jeff Whitty over 3 years
    While this does technically make it build against 4.6.2, it sure the heck doesn't "Migrate" anything per the OP. In fact, this will likely leave you with more, and different, problems.
  • Jeff Whitty
    Jeff Whitty over 3 years
    Agreed, don't just change the target framework in xml - there's so much more that needs to go into it to "migrate" anything! Remove the existing project from the solution, rename the folder, create a new project in the same place with the same name, copy your files back, add them to the project, add your references. Two minutes, super safe, super easy.
  • muaddib
    muaddib over 3 years
    Left me with no problems and was exactly what I was looking for. Thank you for the perfect simple solution!
  • Hugo Nava Kopp
    Hugo Nava Kopp over 3 years
    Nice. This should be a better known feature. No idea why MS doesn't make it more explicit by allowing multi-select directly on the UI.
  • DaveN59
    DaveN59 about 3 years
    It looks like you're converting the other way, from .NETFramework to ,NETStandard - either way, there are a lot of things that can go wrong doing it this way...