I created a project in Visual Studio 2017 RC to check whether I can use new C# 7.0 language features in a .NET Framework 4.5 project. It seems to me that after referencing System.ValueTuple
NuGet, new tuples are working fine. Is there anything else I should think about, or is this going to work?
After checking System.ValueTuple
NuGet dependencies, it looks like .NET Framework 4.0 is not supported. Is this the case, or is there some way to make the new language work in this runtime also?
The do-while statement lets you repeat a statement or compound statement until a specified expression becomes false.
The ' |= ' symbol is the bitwise OR assignment operator.
Let's go through the features new in C# 7.0:
Tuples: The System.ValueTuple
package has a version for the portable-net40+sl4+win8+wp8
profile. That means it is usable on .Net 4.0. (Not sure why dependencies list only .Net 4.5.)
If you wanted to use tuples on even lower versions of .Net, it should still work, as long as you add the code for ValueTuple
and related types to your project.
out
variables, pattern matching, local functions, more expression-bodied members, throw
expressions, numeric literal syntax improvements: All these features are just syntax sugar, so they don't need any new capabilities from the framework.
ref
locals and returns: This feature exposes in C# what the framework supported since the start, so no changes in the framework are needed here either.
Generalized async return types: To use this feature, you need a type that has the AsyncMethodBuilder
attribute, which is in the System.Threading.Tasks.Extensions
package (along with one such type, ValueTask<T>
). This package is only supported on .Net 4.5, so for .Net 4.0, you would need to compile the relevant types yourself. (Using await
on .Net 4.0 also requires Microsoft.Bcl.Async
, but that's nothing new.)
To sum up: All of C# 7.0 should work on .Net 4.5 after installing the required packages and most of it should work on .Net 4.0 too.
Running a C# 7 compiled application on .NET 4.5 should be fine at this moment, but note that running ASP.NET applications that use ASP.NET Dynamic Compilation won't work on .NET 4.5 because the C# 7.0 compiler requires .NET 4.6 to run.
Source: https://github.com/dotnet/roslyn/issues/17908:
The C# 7.0 compiler (2.0 and higher) requires .NET 4.6 to run
The information on https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 (about supporting .NET 4.5) seems to be outdated.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With