Unable to return Tuple from a method using Visual Studio 2017 and C# 7.0
Solution 1
I Just ran through this page on Roslyn which describes the following steps to get this working:
- Start a C# project
- Add a reference to the
System.ValueTuple
package from NuGet (pre-release)
Following those steps, it is now working. But it is really very weird that we need to do that for every single project that we start! Hope this is fixed when we reach the Official release!
Solution 2
I started getting this error after I installed .Net 4.7 Framework, and changed my project to target .Net 4.7
ValueTuple is now included with .Net 4.7, so you don't have to reference the ValueTuple manually.
All I had to do to correct the compile error was remove the reference to System.ValueTuple from my project's references.
Solution 3
I got this error too after updating to .NET 4.7.2 and was able to fix it by re-installing nuget packages using:
Update-Package -Reinstall
Solution 4
I also came accross this issue as I upgraded from .NET 4.6.2 to .NET 4.7.2. Unfortunately, I was not able to remove the package reference to System.ValueTuple
because another NuGet package I use depends on it.
Finally I was able to locate the root cause: There was a .NET 4.6.2 version of mscorlib.dll
lying around in the project folder (output of a publish operation) and MSBuild decided to reference this assembly instead of the official .NET 4.7.2 reference assembly located in C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.
Due to the fact that System.ValueTuple was introduced in .NET 4.7, MSBuild failed the compilation because it could not find the type in the reference assembly of .NET 4.6.2.
Related videos on Youtube
Zein Makki
An eager to learn software developer who is here to share knowledge and learn from this awesome community. Professional Profile: LinkedIn.
Updated on October 26, 2020Comments
-
Zein Makki over 3 years
I've installed Visual Studio 2017 Community that was released a week ago, and I started exploring the new features of C# 7.
So I created a simple method that returns two values:
public class Program { public static void Main(string[] args) { (int sum, int count) a = ReturnTwoValues(); } static (int sum, int count) ReturnTwoValues() => (1, 1); }
Compiler is generating an error:
Error CS8137 Cannot define a class or member that utilizes tuples because the compiler required type 'System.Runtime.CompilerServices.TupleElementNamesAttribute' cannot be found. Are you missing a reference?
I tried finding a reference in the framework with this name, but with no luck !
If we need additional stuff to use C# 7.0 features, then it is very weird that we need to do that for every project ?!
-
Hassan Abdullah almost 7 yearsPossible duplicate of Enabling c# 7 in a asp.net application
-
-
svick over 7 yearsOne thing that should be in the next release is a code fix that lets you easily add the package.
-
Piotr about 7 yearsThis solution helped me; even with the full release version of VS2017 Professional, downloaded in March 2017!
-
Leo Gurdian about 7 yearsThis does get the ball rolling using tuples
-
Michael Puckett II about 7 yearsVery annoyed that this isn't in the official language. Ran into the same problem with this being the fix. They are marketing this as a C# 7 language feature when in fact it's more of a C# 7 extension feature. I guess things can get hairy like that when you're using the new Roslyn compiler (which I'm a fan of)... either way, this is a sad side effect IMO.
-
Zein Makki about 7 years@MichaelPuckettII I think this is because this feature needs classe(s) to exist in the .NET framework and they haven't released a new one yet, that's why a temporary solution was to include this as a Nuget Package. When the next .NET framework is released, the classes needed for this feature should be already built-in. If not, then that is a problem that needs some explanation.
-
chad.mellor about 7 yearsAfter just upgrading to .NET Framework 4.7 I received this error, turns out ValueTuple is now part of 4.7, so uninstalling the tuple package was the solution for me
-
Spencer over 6 yearsStill using .NET Framework 4.6 so this worked for me.
-
Gengjun Wu about 6 yearsGreat, followed your suggestion, now it is included in .NET 4.7, don't need to install from NuGet any more. Thanks.
-
user4951 almost 5 yearscan we use that on .net already. It's 2019. I target for .net 4.7.2