Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between the new netstandardapp and netcoreapp TFMs?

I noticed that NuGet has recently added support for several new TFMs related to .NET Core, including:

  • netstandard (1.0-1.5)
  • netstandardapp (1.5)
  • netcoreapp (1.0)

To the best of my knowledge, netstandard is the .NET Core equivalent of a portable profile; it allows you to target multiple platforms using a single moniker, instead of explicitly spelling out every platform you support, e.g. portable-net45+netcore45+wp81.

Meanwhile, according to this document netstandardapp is more like a console application in .NET Core; it represents something that any .NET Core runtime (e.g. CoreCLR, CoreRT).

What, then, exactly is netcoreapp supposed to be? I found the tracking issue for it here, which includes a comment at the bottom that kinda explains what the difference is, but I don't get what the difference between

NETStandard.Library + app hosts

and

.NET Core base install

is. Could someone please explain it to me?

like image 434
James Ko Avatar asked May 01 '16 04:05

James Ko


People also ask

What is net Core app?

ASP.NET Core is a cross-platform, high-performance, open-source framework for building modern, cloud-enabled, Internet-connected apps. With ASP.NET Core, you can: Build web apps and services, Internet of Things (IoT) apps, and mobile backends. Use your favorite development tools on Windows, macOS, and Linux.

What is .NET core and .NET framework?

NET Framework to create Windows desktop and server-based applications. This includes ASP.NET web applications. On the other hand, . NET Core is used to create server applications that run on Windows, Linux and Mac.


2 Answers

The .NET Standard Library (netstandard) is a consistent library across application models. .NET Core (netcoreapp) runs on top of .NET Standard Library and is a AppModel. From the GitHub page they answer what a .NET Standard application is and what the difference is with .NET Core (https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-standard-applications.md) and (https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md)

UPDATE: The .NETStandardapp is obsolete. The NETCore app replaces it (https://github.com/NuGet/Home/issues/2524)

Q: What is a .NET Standard application?
A: A .NET Standard application is an application that can run on any .NET Core runtime: CoreCLR (current) and .NETNative (future). It can run on one of many .NET core platforms (Windows, OS X, and Linux). It relies on the host provided by the given runtime. It's a composable framework built from the packages on which the application depends. Its assembly loading policy permits newer versions of dependencies without any application configuration (for example, BindingRedirects are not required).

Q: How is this different than .NETCore? A: The .NETCore target framework represents Windows 8, Windows 8.1, and Universal Windows Platform applications. For compatibility purposes this moniker cannot be reused for “.NET Core applications”. The branding overlap is unfortunate.

Q: How is this different than .NETStandard?
A: The NETStandard target framework is an abstract target framework that represents API surface of many frameworks and platforms. As such NETStandard assemblies can run on any platform that supports the NETStandard targeted by that assembly, for example: .NET Desktop, Windows Phone, Universal Windows Platform applications, .NET Standard applications, etc. NETStandardApplication is a concrete target framework that represents a single platform with both API surface and implementation. .NET standard applications are runnable on their own. .NETStandard libraries must be published-for or consumed-by a specific concrete target framework to be used in that type of application.

Overview of .NET Future innovation

like image 121
Martijn van Put Avatar answered Sep 27 '22 18:09

Martijn van Put


What's the difference between the new netstandardapp and netcoreapp TFMs?

netstandardapp is obsolete, netcoreapp replaces it.

What, then, exactly is netcoreapp supposed to be?

netcoreapp is the target framework moniker for the .NET Core Platform. If you add netcoreapp to your project.json's frameworks section, then a build of your app will run on .NET Core.

I don't get what the difference between NETStandard.Library + app hosts and .NET Core base install is. Could someone please explain it to me?

NETStandard.Library + app hosts is the NetStandard.App package. Do not use this - it's dead. It includes three app host packages and the standard library.

  • Microsoft.NETCore.DotNetHostPolicy
  • Microsoft.NETCore.Platforms
  • Microsoft.NETCore.Runtime
  • NETStandard.Library

NET Core base install is the Microsoft.NetCore.App package. Use this instead. It keeps two of of the above packages, scraps two of them, and adds about 37 additional Microsoft.* and System.* packages.

  • Additional Microsoft.* assemblies
  • Microsoft.NETCore.DotNetHostPolicy
  • Microsoft.NETCore.Platforms <----- In April 2016, these two became
  • Microsoft.NETCore.Runtime <------- part of the NETStandard.Library.
  • NETStandard.Library
  • Additional System.* assemblies

References

https://github.com/NuGet/Home/issues/2524 > States that the netstandardapp target framework moniker is "no longer valid."

https://github.com/dotnet/cli/issues/2482 > States that "Projects targetting NetStandardApp need to be ported to NetCoreApp. NetStandardApp is not going to be supported by CLI 1.0.0 RC2."

https://www.myget.org/feed/aspnetvnext/package/nuget/NETStandard.Library > The package history shows the big change in April 2016.

like image 45
Shaun Luttin Avatar answered Sep 27 '22 20:09

Shaun Luttin