c# .net visual-studio visual-studio-2017 c#-7.0

No se puede devolver Tuple de un método con Visual Studio 2017 y C#7.0



.net visual-studio (3)

Instalé Visual Studio 2017 Community, que se lanzó hace una semana, y comencé a explorar las nuevas características de C # 7.

Entonces creé un método simple que devuelve dos valores:

public class Program { public static void Main(string[] args) { (int sum, int count) a = ReturnTwoValues(); } static (int sum, int count) ReturnTwoValues() => (1, 1); }

El compilador está generando un error:

Error CS8137 No se puede definir una clase o miembro que utilice tuplas porque el compilador requiere el tipo ''System.Runtime.CompilerServices.TupleElementNamesAttribute'' no se puede encontrar. ¿Te falta una referencia?

Traté de encontrar una referencia en el marco con este nombre, ¡pero sin suerte!

Si necesitamos cosas adicionales para usar las características de C # 7.0, ¿es muy extraño que tengamos que hacer eso para cada proyecto?


Acabo de leer esta página en Roslyn que describe los siguientes pasos para que esto funcione:

  1. Comience un proyecto de C #
  2. Agregue una referencia al paquete System.ValueTuple de NuGet (versión preliminar)

Siguiendo esos pasos, ahora está funcionando. ¡Pero es realmente muy extraño que tengamos que hacer eso para cada proyecto que comenzamos! ¡Espero que esto se solucione cuando lleguemos al lanzamiento oficial!


Comencé a recibir este error después de instalar .Net 4.7 Framework, y cambié mi proyecto para apuntar a .Net 4.7

ValueTuple ahora se incluye con .Net 4.7, por lo que no tiene que hacer referencia a ValueTuple manualmente.

Todo lo que tuve que hacer para corregir el error de compilación fue eliminar la referencia a System.ValueTuple de las referencias de mi proyecto.


También me encontré con este problema al actualizar de .NET 4.6.2 a .NET 4.7.2. Desafortunadamente, no pude eliminar la referencia del paquete a System.ValueTuple porque otro paquete NuGet que uso depende de ello.

Finalmente pude localizar la causa raíz: había una versión .NET 4.6.2 de mscorlib.dll en la carpeta del proyecto (resultado de una operación de publicación) y MSBuild decidió hacer referencia a este ensamblado en lugar del .NET 4.7 oficial .2 ensamblaje de referencia ubicado en C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.7.2 .

Debido al hecho de que System.ValueTuple se introdujo en .NET 4.7, MSBuild falló la compilación porque no pudo encontrar el tipo en el ensamblado de referencia de .NET 4.6.2.