Instalei o Visual Studio 2017 Community que foi lançado há uma semana e comecei a explorar os novos recursos do C # 7.
Portanto, criei um método simples que retorna dois valores:
public class Program
{
public static void Main(string[] args)
{
(int sum, int count) a = ReturnTwoValues();
}
static (int sum, int count) ReturnTwoValues() => (1, 1);
}
O compilador está gerando um erro:
Erro CS8137 Não é possível definir uma classe ou membro que utiliza tuplas porque o tipo necessário do compilador 'System.Runtime.CompilerServices.TupleElementNamesAttribute' não pode ser encontrado. Você está faltando uma referência?
Tentei encontrar uma referência no framework com esse nome, mas sem sorte!
Se precisarmos de coisas adicionais para usar os recursos do C # 7.0, é muito estranho precisarmos fazer isso para todos os projetos ?!
c#
.net
visual-studio
visual-studio-2017
c#-7.0
Zein Makki
fonte
fonte
Respostas:
Acabei de ler esta página em Roslyn que descreve as seguintes etapas para fazer isso funcionar:
System.ValueTuple
pacote do NuGet (pré-lançamento)Seguindo essas etapas, agora está funcionando. Mas é realmente muito estranho que precisemos fazer isso para cada projeto que iniciamos! Espero que isso seja corrigido quando chegarmos ao lançamento oficial!
fonte
Comecei a receber este erro depois de instalar o .Net 4.7 Framework e mudei meu projeto para o .Net 4.7
ValueTuple agora está incluído no .Net 4.7, então você não precisa fazer referência ao ValueTuple manualmente.
Tudo que tive que fazer para corrigir o erro de compilação foi remover a referência a System.ValueTuple das referências do meu projeto.
fonte
Também me deparei com esse problema ao atualizar do .NET 4.6.2 para o .NET 4.7.2. Infelizmente, não consegui remover a referência do pacote
System.ValueTuple
porque outro pacote NuGet que uso depende dele.Por fim, consegui localizar a causa raiz: havia uma versão do .NET 4.6.2 oculta
mscorlib.dll
na pasta do projeto (saída de uma operação de publicação) e o MSBuild decidiu fazer referência a esse assembly em vez da referência oficial do .NET 4.7.2 montagem localizada emC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.Devido ao fato de que System.ValueTuple foi introduzido no .NET 4.7, o MSBuild falhou na compilação porque não conseguiu localizar o tipo no assembly de referência do .NET 4.6.2.
fonte
Também recebi este erro depois de atualizar para .NET 4.7.2 e fui capaz de corrigi-lo reinstalando pacotes nuget usando:
fonte