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 utiliza tuplas porque el compilador requería el tipo 'System.Runtime.CompilerServices.TupleElementNamesAttribute' no se puede encontrar. ¿Falta alguna referencia?
Intenté encontrar una referencia en el marco con este nombre, ¡pero sin suerte!
Si necesitamos cosas adicionales para usar las funciones de C # 7.0, ¿es muy extraño que tengamos que hacer eso para cada proyecto?
c#
.net
visual-studio
visual-studio-2017
c#-7.0
Zein Makki
fuente
fuente
Respuestas:
Acabo de leer esta página sobre Roslyn que describe los siguientes pasos para que esto funcione:
System.ValueTuple
paquete 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!
fuente
Comencé a recibir este error después de instalar .Net 4.7 Framework y cambié mi proyecto a .Net 4.7 de destino
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.
fuente
También encontré este problema cuando actualicé de .NET 4.6.2 a .NET 4.7.2. Desafortunadamente, no pude eliminar la referencia del paquete
System.ValueTuple
porque otro paquete NuGet que uso depende de él.Finalmente pude localizar la causa raíz: había una versión .NET 4.6.2 de
mscorlib.dll
tirada en la carpeta del proyecto (resultado de una operación de publicación) y MSBuild decidió hacer referencia a este ensamblado en lugar de la referencia oficial .NET 4.7.2 ensamblaje ubicado enC:\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ó en la compilación porque no pudo encontrar el tipo en el ensamblado de referencia de .NET 4.6.2.
fuente
También obtuve este error después de actualizar a .NET 4.7.2 y pude solucionarlo reinstalando los paquetes nuget usando:
fuente