Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I enable all features of C# 7 in Visual Studio 2017 project?

After Visual Studio 2017 was released I wanted to try to create simple console project with new C# 7 features. I expected that I simply download new Visual Studio 2017, then create new console project and can use new C# 7 features. But I can't.

I can use some features, like Tuples if I install NuGet package System.ValueTuple.

But for other features, I don't know what I need to do. For example this NuGet issue.

Do I need to do all this dirty install now? Or I can enable c# 7 features in a more simple way?

like image 750
chromigo Avatar asked Mar 08 '17 15:03

chromigo


People also ask

What is the available feature of C?

The main features of C language include low-level access to memory, a simple set of keywords, and a clean style, these features make C language suitable for system programmings like an operating system or compiler development.

Does C++ have all C features?

This question already has answers here: I have read in tutorials that C++ contains the entire C programming language. If you learn C++ you will eventually learn most of C with some differences between the languages that you will learn over time.

Does C run on everything?

Every program and driver in a Mac, as in Windows and Linux computers, is running on a C-powered kernel.

What feature makes C powerful?

Not only is it a fundamental language but it is permissive in nature as well. It allows the user to manage program memory as it offers the feature of dynamic memory allocation which makes it much faster than any other language.


2 Answers

For arbitrary task-like types you linked to in the 2nd part of your question you need to include the System.Threading.Tasks.Extensions package.

The reason you need these NuGet packages is because the new language features rely on new types added to the .NET framework. The new types that the C# language features depend on will not be "built in to the framework" until the next minor version released after 4.6.2 to not break SemVer1. So unless you are building a project using that next version of the framework you will need to use the NuGet packages to get the features to work.

This is no different than getting extension methods to work in a .NET 2.0 project. You can use extension methods but you need to use a NuGet package (or add the code yourself) to get the types it relies on to be added to your project.


1: So 4.7 or 5.0, whatever they decide to call it, if there is a 4.6.3 it will not be in that version because that is not a minor release version bump, that is a patch version bump and you can't make API changes in a patch version bump without violating Semantic Versioning.

like image 91
Scott Chamberlain Avatar answered Sep 21 '22 13:09

Scott Chamberlain


Any project that targets .NET 4.7 can use C# 7 tuples without adding a Nuget package. You'll have to install it manually:

  1. Upgrade to Windows 10 Creator's Update (10.0.15063), or install .NET Framework 4.7 on other versions of Windows: https://www.microsoft.com/en-us/download/details.aspx?id=55170
  2. From the Start menu, run Visual Studio Installer and click Modify. Go to "Individual components" and check the following two components:
    • .NET Framework 4.7 SDK
    • .NET Framework 4.7 targeting pack

It doesn't work out-of-the-box on Windows 10 Creator's Update because Microsoft omitted the .NET 4.7 components from the ".NET desktop environment" workload. I filed a bug, but they closed it as Not a Bug:

  • https://developercommunity.visualstudio.com/content/problem/41930/vs-2017-does-not-install-net-47-sdk-and-targeting.html
like image 21
Tao Yue Avatar answered Sep 20 '22 13:09

Tao Yue