Saya telah menginstal Komunitas Visual Studio 2017 yang dirilis seminggu yang lalu, dan saya mulai menjelajahi fitur-fitur baru C # 7.
Jadi saya membuat metode sederhana yang mengembalikan dua nilai:
public class Program
{
public static void Main(string[] args)
{
(int sum, int count) a = ReturnTwoValues();
}
static (int sum, int count) ReturnTwoValues() => (1, 1);
}
Kompiler menghasilkan kesalahan:
Kesalahan CS8137 Tidak dapat menentukan kelas atau anggota yang menggunakan tupel karena kompiler diperlukan jenis 'System.Runtime.CompilerServices.TupleElementNamesAttribute' tidak dapat ditemukan. Apakah Anda kehilangan referensi?
Saya mencoba menemukan referensi dalam kerangka dengan nama ini, tetapi tidak berhasil!
Jika kita membutuhkan barang tambahan untuk menggunakan fitur C # 7.0, maka sangat aneh bahwa kita perlu melakukannya untuk setiap proyek ?!
c#
.net
visual-studio
visual-studio-2017
c#-7.0
Zein Makki
sumber
sumber
Jawaban:
Saya baru saja menjalankan halaman ini di Roslyn yang menjelaskan langkah-langkah berikut untuk membuatnya berfungsi:
System.ValueTuple
paket dari NuGet (pra-rilis)Mengikuti langkah-langkah itu, sekarang berfungsi. Tapi sungguh sangat aneh bahwa kita perlu melakukan itu untuk setiap proyek yang kita mulai! Semoga ini diperbaiki ketika kami mencapai rilis Resmi!
sumber
Saya mulai mendapatkan kesalahan ini setelah saya menginstal .Net 4.7 Framework, dan mengubah proyek saya ke target .Net 4.7
ValueTuple sekarang disertakan dengan .Net 4.7, jadi Anda tidak perlu mereferensikan ValueTuple secara manual.
Yang harus saya lakukan untuk memperbaiki kesalahan kompilasi adalah menghapus referensi ke System.ValueTuple dari referensi proyek saya.
sumber
Saya juga mengalami masalah ini saat saya memutakhirkan dari .NET 4.6.2 ke .NET 4.7.2. Sayangnya, saya tidak dapat menghapus referensi paket
System.ValueTuple
karena paket NuGet lain yang saya gunakan bergantung padanya.Akhirnya saya dapat menemukan akar penyebabnya: Ada versi .NET 4.6.2
mscorlib.dll
tergeletak di sekitar folder proyek (keluaran dari operasi publikasi) dan MSBuild memutuskan untuk mereferensikan rakitan ini daripada referensi resmi .NET 4.7.2 perakitan terletak diC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2
.Karena fakta bahwa System.ValueTuple diperkenalkan di .NET 4.7, MSBuild gagal kompilasi karena tidak dapat menemukan jenis di rakitan referensi .NET 4.6.2.
sumber
Saya mendapat kesalahan ini juga setelah memperbarui ke .NET 4.7.2 dan dapat memperbaikinya dengan menginstal ulang paket nuget menggunakan:
sumber