Kesalahan "Anggota yang diperlukan kompiler hilang" muncul beberapa kali dengan hampir tidak ada perubahan pada kode

95

Hari ini setelah menerapkan beberapa perubahan ke situs C # MVC yang saya jalankan, saya kembali untuk membuat beberapa modifikasi lagi dan menemukan kesalahan ini:

Compiler yang hilang diperlukan anggota System.Runtime.CompilerServices.ExtensionAttribute..ctor

Kesalahannya agak kabur (selain deskripsinya, jelas) karena tidak memberi saya file, baris, atau kolom untuk referensi, hanya proyeknya. Juga, itu melempar kesalahan sebanyak 20 kali. Saya hanya membuat tiga perubahan pada kode antara waktu saya menerapkan (itu benar-benar berfungsi pada saat itu) dan sekarang. Saya mengembalikan perubahan saya dan masih melakukan kesalahan yang sama yang tidak masuk akal bagi saya.

Saya belum menemukan banyak informasi tentang kesalahan ini di SO atau Google, selain solusi orang ini dan beberapa referensi untuk beberapa kesalahan proyek Mono (saya tidak menggunakan Mono). Solusi yang diberikan orang di atas memerlukan penambahan definisi kelas yang akan memungkinkan compiler untuk menyelesaikan referensi. Saya tidak secara khusus ingin melakukan ini karena saya belum perlu melakukannya sampai titik ini dan itu hanya akan membuat kode saya kotor.

Hanya ingin tahu apakah ada yang pernah mengalami ini sebelumnya. Terima kasih sebelumnya!

jamesmillerio
sumber
1
Sepertinya Anda menggunakan kompiler C # 3.0 tetapi mengkompilasi terhadap .NET Framework 2.0. Periksa referensi perakitan Anda.
dtb

Jawaban:

27

Kesalahan ini biasanya berarti proyek Anda sedang dikompilasi terhadap .NET 2.0 atau Anda tidak merujuk versi System.Core.dll yang benar

Untuk pertanyaan yang hampir sama, lihat Kesalahan saat menggunakan metode ekstensi di C #

Robert Levy
sumber
Sebenarnya saya memiliki referensi buruk dari perakitan yang tidak lagi saya gunakan (Azure). Saya tidak berpikir perakitan Azure dikompilasi terhadap .Net 2.0 tetapi menghapusnya memperbaiki masalah. Saya tidak yakin mengapa ini terjadi secara acak karena saya belum menyentuh apa pun yang terkait dengan rakitan saya atau versi .Net (4.0) dalam beberapa waktu. Sayangnya, terima kasih telah mengarahkan saya ke arah yang benar.
jamesmillerio
Unity3D menyetel compiler ke .NET 2 secara default (pada saat penulisan). Di pengaturan pemutar, ubah ke versi.NET yang lebih baru untuk memperbaiki masalah ini.
Bayangan
234

Dalam kasus saya, itu karena proyek tidak merujuk Microsoft.CSharp. Setelah saya menambahkan referensi ke assembly itu, itu dikompilasi dengan baik.

Mike
sumber
3
Memecahkan masalah.
Anton Lyhin
16
Masalah saya adalah dalam Uji Unit menggunakan objek dinamis dan Expando. Mengacu pada Microsoft.CSharp adalah triknya. Terima kasih!
realPT
2
Saya memiliki tipe dinamis NewtonSoft dll Di perpustakaan Kelas .NetStandard: `` string weatherjson = await GetAsync (url); dynamic obj = JsonConvert.DeserializeObject (weatherjson); suhu dinamis = obj.main.temp; `` Saya melakukan Pencarian Nuget untuk Microsoft.CSharp dan menginstalnya. Library sekarang dibangun :) T. Dapatkah saya menggunakan library .NetStandard ini di aplikasi Linux, jika diberi referensi Microsofct?
David Jones
Terima kasih! Untuk beberapa alasan ini tidak jelas bagi saya dari pesannya! Saya mengutak-atik proyek yang ditulis lama sekali dan hal-hal referensi ini menakutkan. Membuat orang menghargai kejelasan relatif Java yang biasanya saya gunakan.
Tuntable
83

Saya tidak tahu apakah ada orang lain yang mengalami ini, tetapi saya tiba-tiba mengalami kesalahan ini setelah menambahkan beberapa dynamicjenis kode yang menggunakan dan memasukkan WebAPI ke dalam proyek yang berasal dari aplikasi TypeScript di VS2013. Cukup menambahkan referensi ke Microsoft.CSharp menyelesaikan masalah saya.

Semoga ini bisa membantu orang lain.

H Boyce
sumber
3
Ini persis masalah saya. Menambahkan dinamika secara misterius menghancurkan proyek tersebut.
SouthShoreAK
2
Sama untuk saya, menggunakan dynamic dengan .NetStandard2.0, saya harus menginstal C # Nuget untuk kompilasi
Mahmoud Hanafy
17

Saya mengalami situasi ini juga hari ini. Dalam kasus saya, saya mereferensikan Newton.Json.Net dll v3.5 di aplikasi .NET 4.0 saya. Saya menyadari bahwa saya bahkan tidak menggunakan pustaka ini, jadi setelah saya menghapusnya dari referensi saya, itu tidak lagi memberi saya kesalahan kompiler.

Masalah terpecahkan !!!

Bat_Programmer
sumber
2
Sama untuk saya, Newton.Json.Net dll menyebabkan masalah!
Julien Pierre
Dalam kasus saya, alasannya adalah versi NET20 yang salah dari Microsoft's AntiXSSLibrary.dll. Diganti dengan NET35 - kesalahan hilang.
Denis
7

Kesalahan sebenarnya berasal dari fakta bahwa rakitan 2.0 Anda yang menyebabkan kesalahan berisi kode ini:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

Kode Di Atas memungkinkan Majelis .NET 2.0 menggunakan metode ekstensi (lihat Menggunakan metode ekstensi di .NET 2.0? ). Meskipun membingungkan compiler jika Anda menargetkan .NET 4.0 dan mereferensikan Majelis 2.0 (berisi kode di atas) karena mscorlib.dll (4.0) berisi kelas yang sama di namespace yang sama.

Saya memperbaiki ini

  • dengan menyusun perakitan 2.0 asli lagi tanpa atribut yang menargetkan 4.0
  • dengan melepas perakitan (jelas)
  • dengan menambahkan Atribut Ekstensi ketiga di target yang Anda kompilasi (tampaknya mengesampingkan definisi yang direferensikan)
Menghibur
sumber
Ini persis masalah saya, saya akan mencoba instruksi Anda dan memposting kembali.
JWP
6

Menulis kode ini di suatu tempat dalam proyek Anda dapat memecahkan masalah Anda. Ini bekerja untuk saya

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}
Jalal Ahmadi Tabriz
sumber
dimana kamu menulis kode ini? Anda membuat kelas di root proyek?
Alex
1
@Alex Saya menambahkan kelas yang disebut CompilerService ke root proyek saya dengan kode aboce dan berhasil. Bagus!
Halvard
4

NLog.dll 2.0 yang dirujuk dari proyek .NET 4.0 juga dapat menyebabkan hal ini.

cheesus
sumber
NLog untuk .NET 2.0, direferensikan dari .NET 3.5 tampaknya memberikan kesalahan serupa.
Pedro
3

Mungkin Anda menggunakan dynamickata kunci dalam proyek perpustakaan Kelas .NetStandard. Jika demikian, Anda perlu menambahkan referensi ke Microsoft.CSharpperpustakaan dalam proyek tersebut. Semoga ini akan menyelesaikan masalah Anda.

Towhidul Islam Tuhin
sumber
2

Saya tidak memiliki solusi yang benar, tetapi saya akan menambahkan titik data saya:

Dalam kasus saya, kesalahan ini disebabkan oleh referensi GoogleSearchAPINet20

Inilah yang terjadi:

  • Saya menutup solusi yang membangun
  • Saya membuka solusinya lagi. Itu masih dibangun
  • Segera setelah saya membuat perubahan dan mencoba membangun, saya mendapatkan 19 kesalahan "Anggota yang diperlukan kompiler hilang ..."
  • Saya menghapus referensi ke GoogleSearchAPINet20
  • Saya menambahkan kembali referensi ke GoogleSearchAPINet20
  • Saya membangun solusinya. Itu dibangun tanpa kesalahan
  • Saya sekarang dapat membuat perubahan kode, membangun atau melakukan tindakan lain dengan solusi dengan benar selama Visual Studio saya terbuka
  • Saya menutup Visual Studio
  • Ulangi dari langkah pertama

Saya sama sekali tidak mereferensikan System.Core.dll dalam solusi saya dan kerangka kerja target saya adalah .NET 4.

Saya agak kesal pada saat ini ...

Evgeny
sumber
1

Dapatkan kesalahan ini saat mencoba menggunakan Tugas asinkron terhadap .NET 4.0. Memperbarui Target Framework menjadi 4.5.2 memperbaiki masalah.

Abadi 21
sumber
1

Saya mencapai set pengecualian yang sama setelah saya menambahkan beberapa metode async ke proyek winforms. Saya perlu meningkatkan versi .NET saya dari 4 menjadi 4,5

pengguna8675309
sumber
0

Bagi saya, masalah terjadi ketika saya menambahkan metode asynchronous dengan async Task menunggu di proyek .net4.0 saya!

Dengan versi .NET-Framework 4.5 sebelumnya, Anda harus menginstal paket ini:

Install-package Microsoft.Bcl.Async –pre

atau

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

info lebih lanjut tentang Nuget atau Nuget

A. Morel
sumber