Boot Configurators Only: C# 9.0 Draft Spec (2023)

  • Article
  • 15 minutes to read


This proposal adds the concept of init-only properties and indexers to C#. These properties and indexers can be set at object creation point, but are effectively setreceiveonly after the creation of the object is complete. This allows for a much more flexible immutable model in C#.


The underlying mechanisms for creating immutable data in C# have not changed since 1.0. remain:

  1. Declare fields asread-only.
  2. Declare properties that contain only onereceiveaccessory

While these mechanisms allow the construction of immutable data, they do so by adding cost to type boilerplate code and excluding such types of functions as object and collection initializers. This means developers have to choose between ease of use and immutability.

A simple immutable object likePointrequires twice as much boiler plate code to support the construction as to declare the type. The larger the type, the higher the cost of this boiler plate:

struct Point{ public int X { get; } public int Y { get; } public point (int x, int y) { this.X = x; this.Y = and; }}

IsdarinThe accessor makes immutable objects more flexible by allowing the caller to mutate members during the construction process. This means that the object's immutable properties can participate in object initializers, eliminating the need for any boilerplate constructors on the type. HePointType is now simple:

struct Point{ public int X { get; in this; } public int Y { get; in this; }}

The consumer can use object initializers to create the object.

var p = new point() { X = 42, Y = 13 };

Detailed design

home accessories

An init-only property (or indexer property) is declared withdarinaccessories insteadput downAccessory:

class student { public string FirstName { get; in this; } public string lastname { get; in this; }}

An instance property that contains onedarinThe accessor is considered configurable under the following circumstances, except when it is a local or Lambda function:

  • During an object initializer
  • during oneconexpression initializer
  • Inside an instance constructor of the containing or derived type, inIt isÖBase
  • WithindarinShareholder of a property, inIt isÖBase
  • Using internal attributes with named parameters

The earlier times when thedarinAccess methods are configurable and are collectively referred to in this document as the construction phase of the object.

This means thatStudentThe class can be used in the following ways:

var s = new Student(){ FirstName = "Jared", LastName = "Parosns",};s.LastName = "Parsons"; // Error: LastName no se puede configurar

The rules whendarinAccess methods are configurable and span type hierarchies. If the member is accessible and the object is known to be in the construction phase, the member is configurable. In particular, this allows:

Class Base{ public bool Value { get; in this; }}class Derived : Base{ public Derived() { // Not allowed with get only properties, but allowed with init Value = true; }}Class Usage{ void Example() { var d = new Derived() { Value = true }; }}

at point adarinWhen the accessor is invoked, the instance is known to be in the open creation phase. Therefore adarinThe accessor can perform the following actions in addition to what it normally doesput downAccessor can do the following:

(Video) How to Use the Warnings Next Generation Plugin in Jenkins

  1. call someone elsedarinAccessories available fromIt isÖBase
  2. Assign toread-onlyFields declared of the same type viaIt is
class complex{ read-only int Field1; int field2; int Prop1 { get; in this; } int Prop2 { get => 42; start {field1 = 13; // ok Field2 = 13; // good Prop1 = 13; // So } }}

The ability to assignread-onlyfields of adarinThe accessor is restricted to those fields that are declared to be of the same type as the accessor. Cannot be used to assignread-onlyFields in a base type. This rule ensures that type authors maintain control over their type's mutability behavior. Developers who do not want to usedarincannot be influenced by other types choosing everything, so:

class Base{ internal read-only field internal; Property int inner { get => Field; init => field = value; // ok } internal int OtherProperty { get; in this; }}Derived class: Base{ internal read-only int DerivedField; internal int DerivedProperty { get => DerivedField; init { derived field = 42; // good property = 0; // Good field = 13; // The error field is read-only } } public Derived() { Property = 42; // Good field = 13; // The error field is read-only }}

Ifdarinis used on a virtual property, all overrides must also be marked asdarin. Likewise, it is not possible to overwrite a simple oneput downcondarin.

class Base{ public virtual int Property { get; in this; }}Class C1: Base{ public override int Property { get; in this; }}class C2: Base{ // error: property must have init to override Base.Property public override int Property { get; Location; }}

AndinterfaceDeclaration can also participatedarinStyle initialization via the following pattern:

interfaz IPerson{ string Nombre { get; en eso; }} class Init{ void M<T>() where T : IPerson, new() { var local = new T() { Name = "Jared" }; local.Nombre = "Jraed"; // Fehler }}

Limitations of this function:

  • IsdarinAccessor can only be used on instance properties
  • A property cannot contain both: adarinjput downaccessory
  • All overrides of a property must existdarinif the base haddarin. This rule also applies to the implementation of the interface.

read-only structures

darinAccessors (both automatically implemented accessors and manually implemented accessors) are allowed on the properties ofread-only structures as wellread-onlyCharacteristics.darinAccess rights must not be markedread-onlyhimself, in bothread-onlyand not-read-only StructureThe type

read-only structure ReadonlyStruct1{ public int Prop1 { get; in this; } // Allowed}struct ReadonlyStruct2{ public readonly int Prop2 { get; in this; } // Allow public int Prop3 { get; read-only start; } // Mistake}

metadata encoding

PropertydarinAccessories are issued by defaultput downAccessor with return type marked with a modreq ofIsExternalInit. This is a new type that will have the following definition:

namespace System.Runtime.CompilerServices{ public sealed class IsExternalInit { }}

The compiler matches the type using the full name. It is not required to appear in the main library. If there are multiple types with that name, the compiler unbinds in the following order:

  1. The one defined in the project to be compiled.
  2. The one defined in corelib

If none of these are present, a type ambiguity error is thrown.

the design forIsExternalInitis more overcastis problem


breaking changes

One of the key pivots in coding this function will boil down to the following question:

Is it a binary interrupt change to replacedarinconput down?

substitutedarinconput downand thus making a property fully writable is never a source change on a non-virtual property. It just expands the set of scenarios in which the property can be written. The only questionable behavior is whether or not this is still a binary interrupt change.

If we want to changedarinAput downa binary compatible source and a change will then take us into modreq vs attributes below because it excludes modreqs as a solution. On the other hand, if this is not considered interesting, it will make the decision between modreq and attributed less effective.

resolutionThis scenario is not considered convincing by LDM.

(Video) web api from another web api in c#

modreqs against attributes

The issuance strategy fordarinProperty accessors must choose between using attributes or modreqs when returning metadata. These have different tradeoffs that need to be considered.

Annotating a property set accessor with a modreq declaration means that CLI-compliant compilers will ignore the accessor unless it understands the modreq. This means that only compilers are aware of itdarinthe member will read. Compilers are not aware of thisdarinwill ignore thatput downaccessor and therefore does not inadvertently treat the property as read/write.

The disadvantage of modreq isdarinbecomes part of the binary signature of theput downAdd or remove accessoriesdarinThis breaks the binary compatibility of the application.

Using attributes to annotate theput downaccessor means only compilers that understand the attribute can restrict access to it. An unconscious compilerdarinit will see it as a simple read/write property and allow access.

On the surface, this would mean that this decision is a choice between additional security at the expense of binary compatibility. Going a little deeper into the added security isn't exactly what it sounds like. It does not protect against the following circumstances:

  1. reflection aboutpublicmembers
  2. The usage ofdynamic
  3. Compilers don't recognize modreqs

It should also be considered that when we complete the IL verification rules for .NET 5,darinIt will be one of those rules. This means that an additional application is obtained by simply checking compilers that emit verifiable IL.

The core languages ​​for .NET (C#, F#, and VB) will be updated to recognize themdarinSo the only realistic scenario here is when a C# 9 compiler failsdarinProperties and are seen by older toolsets like C#8, VB 15, etc... C#8. That's the tradeoff for considering binary compatibility.

UseThis discussion is primarily for members only, not fields. Whiledarin-Fields were rejected by LDM, it's still interesting to use them for the modreq vs. attribute. HedarinA relaxation of the existing constraints is characteristic of the fieldsread-only. That is, if we cast the fields asread-only+ an attribute, there is no risk of older compilers abusing the field because they would already recognize itread-only. So using a modreq here doesn't add any additional protection.

resolutionThe function uses a modreq to encode the propertydarinSetter. The compelling factors were (in no particular order):

  • Desire to keep older compilers from violatingdarinSemantics
  • I want to add or removedarinin onevirtualstatement orinterfaceboth a source and a binary breakout change.

There was also no significant support for removaldarinto be a binary compatible change he made the decision to use modreq directly.

init vs. Solo-Initial

There were three forms of syntax considered during our BOM meeting:

// 1. Use init int Option1 { get; in eso; }// 2. Use init setint Option2 { get; a series of beginnings; }// 3. Use initolyint Option3 { get; initially; }

resolutionThere was no syntax that was overwhelmingly preferred in LDM.

One point that drew a lot of attention was how the choice of syntax would affect our abilitydarinMembers as a general function in the future. Choosing option 1 would mean that it would be difficult to define a property using adarinStylereceivemethod in the future. Eventually it was decided that if we decided to go ahead with thatdarinMembers in the future, we can allowdarina modifier in the property access list, and an abbreviation for hisStarter-Set. In essence, the following two statements would be identical.

int property1 { get; in this; }int Property1 { get; starter set; }

It was decided to continuedarinas a separate accessor in the list of property accessors.

(Video) Simple error handling in Rust

False start warning

Consider the following scenario. A type declares adarinonly member not specified in the constructor. Should the code creating the object get a warning if it couldn't initialize the value?

At this point it is clear that the field is never set and therefore has many similarities to the initialization error warning.PrivateSo a warning would seem useful here?

However, this warning has significant disadvantages:

  1. Complicates the compatibility history of switchingread-onlyAdarin.
  2. It requires carrying additional metadata to specify the members that the caller should initialize.

If we think the general scenario of forcing object creators to get warnings/errors on certain fields has value here, then it probably makes sense as a general feature. There's no reason you should limit yourself to thatdarinmembers

resolutionThere is no indication of the consumption ofdarinfields and properties.

LDM wants to have a broader discussion on the idea of ​​required fields and properties. This can cause us to go back and reconsider our positiondarinMembers and Confirmation.

Allow init as a field modifier

In the same waydarincan serve as a property accessor, it could also serve as a label for fields to give them behavior similar to that ofdarinCharacteristics. This could allow the field to be assigned using type, derived types, or object initializers before construction is complete.

class student{ public init string firstname; public init string LastName;}var s = new Student(){ FirstName = "Jarde", LastName = "Parsons",}s.FirstName = "Jared"; // The FirstName error is read-only

In the metadata, these fields would be marked asread-onlyFields but with an additional attribute or modreq to indicate what they aredarinstyle fields.

resolutionLDM agrees that this proposal is solid, but overall the environment felt detached from the features. The decision was to just proceed withdarinproperties for now. This has reasonable flexibility as adarinProperty can mutate aread-onlyField in the property declaration type. This will be reconsidered if there is significant customer feedback justifying the scenario.

Allow init as a type modifier

In the same way theread-onlyA modifier can be applied to aStructureto automatically declare all fields asread-only, IsdarinOnly one modifier can be declared in aStructureÖClassautomatically mark all fields asdarin.This means that the following two type declarations are equivalent:

struct point { public init int X; public init int Y;}// vs init struct Point{ public int X; public int Y;}

resolutionThis feature is tooLindohere and it conflicts with theread-only structurefunction on which it is based. Heread-only structureThe trait is simple in the sense that it appliesread-onlyto all members: subject areas, methods, etc... Thelaunch structureThe function would only apply to properties. In fact, this causes users to get confused.

Given thedarinis only valid in certain aspects of a type, we reject the idea of ​​having it as a type modifier.



IsdarinThe feature is designed to be compatible with existing onesreceiveproperties only. In particular, it should be a completely additive change in a propertyreceiveonly today, but you want more flexible semantics for object creation.

For example, consider the following type:

(Video) .NET 7 Beginner Course 🚀 Web API, Entity Framework 7 & SQL Server

classname { public string First { get; } public string Last { get; } public name (first string, last string) { First = first; last = last; }}

add to darinto these properties is a continuous change:

classname { public string First { get; in this; } public string Last { get; in this; } public name (first string, last string) { First = first; last = last; }}

driving test

If .NET Core decides to re-implement the IL check, the rules will need to be adjusted accordinglydarinMembers This needs to be included in the rule changes for non-mutating access toread-onlyData.

The IL verification rules should be divided into two parts:

  1. allowdarinFounding members aread-onlycampo.
  2. Determine when adarinMember can be called legally.

The first is a simple adjustment to the existing rules. The IL Verifier can be taught to recognizedarinmembers and from there all you have to do is thinkread-onlyfield configurableIt isin such a member.

The second rule is more complicated. In the simple case of object initializers, the rule is simple. It should be legal to calldarinMembers if the result of aneuThe expression is still on the stack. That is, until the value is stored in a local field or array element, or passed as an argument to another method, the call is still alloweddarinMembers This ensures that as soon as the result ofneuexpression is published to a named identifier (other thanIt is) then it is no longer legal to calldarinmembers

However, the most complicated case is when we mixdarinMembers, object initializers andWait. This can lead to the newly created object being temporarily elevated to a state machine and thus placed in a field.

var student = new student() { name = expected SomeMethod() };

Here is the result ofnew student()is heaved into a state machine as a field before the sentenceNameoccurs. The compiler must mark such elevated fields in a way that the IL checker understands that they are inaccessible to the user and therefore do not violate the intended semantics ofdarin.

home members

IsdarinThe modifier could be extended to apply to all members of the instance. This would generalize the conceptdarinduring object construction and allow types to declare helper methods that could participate in the construction process to be initializeddarinfields and properties.

Such members would have all restrictions that adarinAccessor does in this design. However, the need for this is debatable and can certainly be added in a future version of the language in a compatible way.

Generate three accessors

A possible implementation ofdarinproperties to dodarincompletely separate fromput down. This means that a property can potentially have three different accessors:receive,put down, jdarin.

This has the potential benefit of allowing the use of modreq to force the fix while maintaining binary compatibility. The implementation would be something like this:

  1. Anddarinthe accessor is always emitted if there is oneput down. If not defined by the developer, it is simply a reference toput down.
  2. The set of a property of an object initializer is always useddarinif it is present but relies on itput downif missing

This means a developer can always safely removedarina property.

The disadvantage of this design is that it only makes sense ifdarinesalwaysissued if there is oneput down. Language can not know ifdarinhas been deleted in the past, you must assume that it was, and hence thedarinmust always be issued. That would result in significant metadata expansion and just isn't worth the cost of compatibility here.


Does .NET core 3.1 support C# 9? ›

C# 9 is supported only on .NET 5 and newer versions. Check the Visual Studio platform compatibility page for details on which .NET versions are supported by versions of Visual Studio.

Can I use C# 9 with .NET framework? ›

C# 9 works great for . NET Framework targeted projects. It has guard rails to keep you from using the couple language features that require newer runtimes.

What is the difference between C# 9 and 10? ›

C# 9 saw the introduction of record classes. C# 10 takes the record keyword further, so you can now declare a struct as a record. One of the benefits with record classes is that they can be immutable. Below is an example of how to declare an immutable struct record, and how to initialise it.

What is record type C# 9? ›

C# 9 introduces records, a new reference type that you can create instead of classes or structs. C# 10 adds record structs so that you can define records as value types. Records are distinct from classes in that record types use value-based equality.

Is C# 9 backwards compatibility? ›

While we still have some features left in C# 8 and 9 that can work on our older targets, these remaining ones will need some extra care in order to make the Roslyn compiler happy. Specifically, these are features that are backwards compatible, but do need some specific types or attributes to be present in the project.

How to enable C# 9.0 features in Visual Studio? ›

Within Visual Studio, open the Tools menu, click on options, and select the Preview Features item in the Environment group. There are a couple of preview features that can be enabled if we need them. To make C# 9 available, we need to enable the Use previews of the .

Why can't I select different C# version? ›

If you're using the latest version of Visual Studio 2019, C#, you may not see the option to change the C# language version of your project. This is a new change in Visual Studio 2019/. NET Core 3.0. The new C# compiler chooses the default version based on your .

Is C# .NET still relevant? ›

.NET Framework Trends 2023

For example, C# has been around for over a decade, but it's still one of the most popular programming languages on the market today. Its popularity can be attributed to its ease of use and ability to work with other languages such as Java and JavaScript.

What is the difference between C# and .NET Framework? ›

The key difference from . NET is that C# is not a platform but a programming language. The reason these terms are often confused or used interchangeably is that C# was created by Microsoft specifically to work with the . NET framework.

Is C# becoming obsolete? ›

C# is a programming language that is worth learning.

You can use it as a Full Stack language and programming in C# will be the best decision. In 2022, It will be a widely used language and is widely recognized among other programming languages such as Java and Python.

Is C# becoming less popular? ›

C# is not really losing popularity. It is true that a couple of years ago it had a greater popularity than it has today but thanks to all that Microsoft is doing for it, its popularity is increasing. So yes, you could say that C# is a programming language that has kept up very well over time.

How much is C# faster than Python? ›

As a compiled language, C# converts directly into machine code that a processor can execute. No interpreter needed. In some cases, this means that C# code can run up to 44 times faster than Python.

When was C# 9 released? ›

November 2020

What are the different C# data types? ›

C# mainly categorized data types in two types: Value types and Reference types. Value types include simple types (such as int, float, bool, and char), enum types, struct types, and Nullable value types. Reference types include class types, interface types, delegate types, and array types.

What are the different types of C#? ›

C# supports nine integral types: sbyte , byte , short , ushort , int , uint , long , ulong , and char .

Can C# run on all platforms? ›

NET and C# got cross-platform capabilities for the first time. Because of this, C# applications can be coded once and launched on any platform, including Web apps, Windows, macOS, Linux, Android, and iOS.

Can C# run on any platform? ›

Whether you're working in C#, F#, or Visual Basic, your code will run natively on any compatible operating system. You can build many types of apps with .NET. Some are cross-platform, and some target a specific set of operating systems and devices.

Is backwards compatibility discontinued? ›

In November 2021, Microsoft announced that they would be ending their backward compatibility program after six years of adding games.

How do I change the targeted version of C# in Visual Studio? ›

Navigate to Properties -> Build -> Advanced, select “C# latest minor version(latest)” to pick latest installed minor version. The C# latest major version is the default language version set, and choosing the “C# latest minor version” it will always refer to latest C# version, in this case it will refer to C# 7.2.

How to change the version of C#? ›

In a MVC project, I changed the Project properties as follows:
  1. Navigate to Build tab.
  2. Click "Advanced..."
  3. Change Language version to "C# latest minor version (latest)"
  4. Click Ok.
  5. Build the project.

What is the most current version of C#? ›

C# 10 is supported on .

NET downloads page. You can also download Visual Studio 2022, which includes the . NET 6 SDK.

What is C# obsolete? ›

An obsolete attribute, in C#, is a declarative tag used while declaring a type or a member of a type to indicate that it should no longer be used.

What version of C# does .NET 4.8 use? ›

NET Framework 4.8 is permanently stuck at C# 7.3. It is possible to install C# 8.0 on . NET Framework (as this Stack Overflow question explains) but there are some new features such as new nullable attributes that aren't supported.

Will .NET become obsolete? ›

It is still widely used by developers and remains a top open-source framework on GitHub. In fact, according to the Stack Overflow 2021 developer survey, more than 15% of developers still prefer ASP.NET over other frameworks for their web development needs.

What is replacing .NET framework? ›

NET 6 is a replacement for the legacy . NET Framework. Microsoft has no plans to port Web Forms, Windows Communication Foundation (WCF), or Windows Workflow Foundation (WF) from . NET Framework to .

Is .NET Core replacing .NET framework? ›

NET Core is the future. With the planned release of a unified platform in 2020, . NET Core will replace . NET Framework.
. NET Core vs . NET Framework.
.NET Core.NET Framework
Cross-platform (OS platform): runs on Windows, Linux, and macOSRuns on Windows
4 more rows
Dec 5, 2019

Do I need .NET Framework for C#? ›

C# is just a programming language, and just like any other programming: It can be compiled in any way you can think of: That includes compiling without . NET. In fact, the MONO project (C# for a lot of platforms) does just that.

Are .NET and C# the same thing? ›

Microsoft's implementation of C# is also heavily integrated with the . NET framework, so it's understandable that these two concepts would be confused, but they are different things. C# is a programming language and . NET is the framework and runtime that C# programs are built with and run on.

Should I use .NET Core or .NET Framework? ›

NET Core is faster than . NET Framework because the architecture of . NET Core is written or restructured from scratch to make it a modular, lightweight, fast, and cross-platform Framework. The Applications require technologies like workflow, webforms or WCF that are not present in .

Why is C# so much better than Java? ›

Why is C# Faster than Java? C# is generally considered faster than Java, although the difference is insignificant. Both languages are compiled, but C# uses a just-in-time compiler while Java uses an ahead-of-time compiler. This means that C# code is typically executed more quickly.

What is the disadvantage of C#? ›

Disadvantages of C#Some of the disadvantages of C# are:The code in C# needs to be compiled every time a change is made. This can lead to many errors or bugs if the code is not tested thoroughly each time. A . NET application needs a Windows platform to execute and this is also true for C# as it is a part of the .

Is C# hardest to learn? ›

C# is one of the easiest programming languages to learn. C# is a high-level, general-purpose programming language that is easy to read because of its well-defined class hierarchy. It is the perfect language for beginner developers as it will be straightforward to grasp compared to most other languages.

Is C# old tech? ›

When compared to long-standing languages like Python and PHP, C# is a young addition to the programming family at nearly twenty years old. The language was developed in the year 2000 by Microsoft's Anders Hejlsberg, a Danish software engineer with a history for popular creations.

Are C# programmers in demand? ›

Not only are C# developers in high demand, but there are many types of careers out there for them. For example, with C#, you can work in data science, front end development, backend development, or app development.

What language is C# most like? ›

Syntactically, C# is very similar to Java and C/C++. It is a compiled, object-oriented language that compiles to . NET Intermediate Language. Originally, C# was used for Microsoft-focused development of Windows Forms and web development with ASP.NET.

How long does it take to master C#? ›

It will take you about two to three months to learn the basics of C#, assuming you devote an hour or so a day to learning. You may learn C# quicker if you study part-time or full-time.

Can C# be used for AI? ›

What makes C++ and C# good for AI: Both languages are widely used in game development, and many games make use of AI. They're both high-performance, due to being compiled languages and offering low-level control when necessary. C# has a wide range of available libraries and tooling support from Visual Studio.

Is C# faster than SQL? ›

They are both as fast as possible, if you make good code and good queries. SQL Server also keeps a lot of statistics and improve the return query - c# did not have this kind of part, so what to compare ?

Will C# ever be as fast as C++? ›

In conclusion, you can, in theory, create C# code that's just as fast as C++ code. But, in most cases, C++ code is going to be faster because of coding habits.

What are the 5 main data types? ›

Most modern computer languages recognize five basic categories of data types: Integral, Floating Point, Character, Character String, and composite types, with various specific subtypes defined within each broad category.

What are the 5 basic data types in C? ›

Types of Data Types in C

Floating-point, integer, double, character. Union, structure, array, etc.

What is the difference between C# and C sharp? ›

C# or also known as C Sharp is a programming language developed by Anders Hjelsberg. It was initially known as 'Cool' which later got renamed as C Sharp. C Sharp is a high-level object-oriented program which like C++, is built over C. C# has C as its backbone.

What is the difference between Visual C# and C#? ›

C# and Visual C# are both the same. When you use Visual Studio for C# development, it is called Visual C# . Consider Visual C# as an implementation of C#. Microsoft Visual Studio is an IDE from Microsoft to develop programs, web app, web services, etc.

Which is better C# or F#? ›

Task Runtime Performance

Asynchronous code (Tasks) in C# runs faster than in F# because the compiler supports them natively and generates optimized code. The difference may be reduced, once F# supports tasks natively, too.

What version of C# does .NET Core 3.1 use? ›

Versions since . NET Core
C# versionVS version.NET version
2019 (v16.3).NET Core 3.0
2019 (v16.4).NET Core 3.1
9.02019 (v16.8).NET 5
10.02022.NET 6
9 more rows

Is .NET Core 3.1 still supported? ›

NET Core 3.1 (LTS) reaches EOS on December 13, 2022. As Dominique Whittaker, the Senior Program Manager responsible for . NET Core and . NET Native releases, warned this July, Microsoft will stop providing technical support or servicing updates after EOS.

Is .NET Core 3.1 supported? ›

. NET Core 3.1 is supported on multiple operating systems per their lifecycle policy.

Is .NET Core 3.1 obsolete? ›

Net Core Version 3.1 will end on December 13, 2022. QID Detection Logic (Authenticated): This QID looks for the installed versions of . NET Core 3.1 and reports it as End Of Life.

What is the stable version of C#? ›

As of November 2022, the most recent stable version of the language is C# 11.0, which was released in 2022 in .NET 7.0.
C Sharp (programming language)
Designed byAnders Hejlsberg (Microsoft)
DeveloperMads Torgersen (Microsoft)
First appeared2000
Stable release11 / 8 November 2022
Major implementations
20 more rows

What is the C# version in net 4.7 2? ›

NET Core, you should be able to use the rest of C# 8 in . NET 4.7. 2.

What is replacing .NET Core? ›

NET 6 is an open-source and cross-platform framework, meaning that it automatically replaces . NET Core and . NET Framework with a single, more powerful, unified platform.

Does .NET 5.0 replace .NET Core? ›

Net doesn't change the . Net Core architecture, but adds some additional benefits including Core Runtime & API Performance enhancement, and deployment flexibility. . Net 5 also supports some major sub-framework for desktop development like Entity Framework, GDI+, LINQ, and ADO.Net.

Is .NET Core obsolete? ›

The long-term-support (LTS) version 3.1 of Microsoft . NET Core Framework is slated to go out of support on December 13th, 2022. Microsoft recommends upgrading . NET Core 3.1 applications to .

How do I migrate from .NET Core 3.1 to 6? ›

This article describes how to upgrade the solution from . NET Core 3.1 to . NET 6.0 with an example of a web application project.
  1. Step 1 - Change the Project Target Framework. ...
  2. Step 2 - Updating Package references. ...
  3. Step 3 - Delete Obj and bin folder. ...
  4. Step 4 - Build the solution.
Jan 10, 2023

How do I update my .NET Core 3.1 to 6? ›

NET Core 3.1 from the command line. On a Windows computer, open a Command Prompt and go to %ProgramFiles%dotnet folder. On macOS or Linux, open a terminal window. If you use Visual Studio 2019 16.11 or 17.0 or Visual Studio 2022 17.2, then based on the workloads installed, you may also have .

Why is .NET Core 5.0 out of support? ›

NET 5.0 will be reaching end of support on May 10 and after the . NET May 2022 updates we will no longer provide updates including security fixes, or technical support for this version. We strongly recommend you migrate your applications to .

Is .NET Core faster than node? ›

NET Core has an easier time working with CPU-intensive tasks and rendering static pages since the in-built IIS server kernel caching makes this process very straightforward. Therefore, . NET core vs node.

Is .NET Core going to replace .NET framework? ›

NET Core is the future. With the planned release of a unified platform in 2020, . NET Core will replace . NET Framework.
. NET Core vs . NET Framework.
.NET Core.NET Framework
Cross-platform (OS platform): runs on Windows, Linux, and macOSRuns on Windows
4 more rows
Dec 5, 2019

What is .NET Core called now? ›

In 2014, Microsoft introduced .NET Core as a cross-platform, open-source successor to .NET Framework. This new implementation of .NET kept the name .NET Core through version 3.1. The next version after .NET Core 3.1 was named .NET 5.


1. Securing SPAs and Blazor Applications using the BFF (Backend for Frontend) Pattern - Dominick Baier
(NDC Conferences)
2. How to develop a custom workflow for Dynamics 365 Finance & Operations, an end to end procedure
(Learning Business Apps with Pir Khurram Rashdi)
3. Coding Shorts: Top-Level Statements in C# 9
4. TP-Link Router Bandwidth Control / Bandwidth Management Settings (Set Speed Limit)
5. Getting started with wolfSSL in 2022
6. Comments in Angular - Building Nested Comments with Replies
(Monsterlessons Academy)
Top Articles
Latest Posts
Article information

Author: Msgr. Benton Quitzon

Last Updated: 01/19/2023

Views: 6446

Rating: 4.2 / 5 (63 voted)

Reviews: 86% of readers found this page helpful

Author information

Name: Msgr. Benton Quitzon

Birthday: 2001-08-13

Address: 96487 Kris Cliff, Teresiafurt, WI 95201

Phone: +9418513585781

Job: Senior Designer

Hobby: Calligraphy, Rowing, Vacation, Geocaching, Web surfing, Electronics, Electronics

Introduction: My name is Msgr. Benton Quitzon, I am a comfortable, charming, thankful, happy, adventurous, handsome, precious person who loves writing and wants to share my knowledge and understanding with you.