Kodda neredeyse hiç değişiklik olmadan birden çok kez atılan "Eksik derleyici gerekli üye" hatası


96

Bugün çalıştırdığım bir C # MVC sitesinde bazı değişiklikler yaptıktan sonra, daha fazla değişiklik yapmak için geri döndüm ve şu hatayla karşılaştım:

Eksik derleyici gerekli üye System.Runtime.CompilerServices.ExtensionAttribute..ctor

Hata biraz belirsizdir (tabii ki açıklamasından başka) bana referans için bir dosya, satır veya sütun vermiyor, sadece proje. Ayrıca, hatayı toplam 20 kez atar. Konuşlandırdığım zaman (o sırada tamamen işlevseldi) ve şimdiki zaman arasında kodda yalnızca üç değişiklik yaptım. Değişikliklerimi geri aldım ve yine de bana mantıklı gelmeyen aynı hatayı atıyor.

SO veya Google'da bu hata hakkında çok fazla bilgi bulamadım, bu adam çözümü dışında ve bazı Mono proje hatalarına birkaç referans (Mono kullanmıyorum). Yukarıdaki adamın verdiği çözüm, derleyicinin referansı çözümlemesine izin verecek bir sınıf tanımı eklemeyi gerektirir. Bunu özellikle yapmak istemiyorum çünkü bu noktaya kadar yapmam gerekmiyor ve bu sadece kodumu bulandıracak.

Daha önce bununla karşılaşan var mı merak ediyorum Şimdiden teşekkürler!


1
Görünüşe göre bir C # 3.0 derleyicisi kullanıyor, ancak .NET Framework 2.0'a karşı derleme yapıyorsunuz. Montaj referanslarınızı kontrol edin.
dtb

Yanıtlar:


27

Bu hata genellikle projenizin .NET 2.0'a karşı derlendiği veya System.Core.dll'nin doğru sürümüne başvurmadığınız anlamına gelir.

Neredeyse yinelenen bir soru için, C # 'da uzantı yöntemlerini kullanırken hata bölümüne bakın.


Aslında artık kullanmadığım bir derlemeden (Azure) kötü bir referansım olduğu ortaya çıktı. Azure derlemesinin .Net 2.0'a karşı derlendiğini düşünmüyorum, ancak kaldırılması sorunu çözdü. Bir süredir meclislerimle veya .Net sürümüyle (4.0) ilgili hiçbir şeye dokunmadığım için bunun neden rastgele ortaya çıktığından emin değilim. Ne yazık ki, beni doğru yönü gösterdiğin için teşekkürler.
jamesmillerio

Unity3D, derleyiciyi varsayılan olarak .NET 2'ye ayarlar (yazma sırasında). Oynatıcı ayarlarında, bu sorunu düzeltmek için daha yeni.NET sürümüne değiştirin.
Gölge

236

Benim durumumda bunun nedeni projenin referans olmamasıydı Microsoft.CSharp. Bu derlemeye bir referans ekledikten sonra, gayet iyi derlendi.


3
Sorunu çözdüm.
Anton Lyhin

16
Sorunum, dynamic ve Expando nesnesini kullanan bir Birim Testindeydi. İşin püf noktası Microsoft.CSharp'a başvurmaktı. Teşekkürler!
realPT

2
Dinamik tip NewtonSoft vb. NetStandard Sınıf kitaplığında: `` string weatherjson = await GetAsync (url); dinamik obj = JsonConvert.DeserializeObject (weatherjson); dinamik temp = obj.main.temp; `` Microsoft.CSharp için Nuget Araması yaptım ve onu yükledim. Kitaplık şimdi oluşturuluyor :) S. Bu .NetStandard kitaplığını, Microsofct referansı verildiğinde Linux uygulamasında kullanabilir miyim?
David Jones

Teşekkür ederim! Nedense mesajdan bu bana açık değildi! Uzun zaman önce yazılmış bir projede ince ayar yapıyorum ve bu referanslar korkutucu. Normalde kullandığım Java'nın göreceli netliğini takdir ettiriyor.
Tuntable

83

Başka birinin bunu yaşayıp yaşamadığını bilmiyorum, ancak dynamictürleri kullanan bazı kodlar ekledikten ve WebAPI'yi VS2013'te TypeScript uygulaması olarak ortaya çıkan bir projeye dahil ettikten sonra aniden bu hataya girdim. Yalnızca Microsoft.CSharp'a bir referans eklemek sorunumu çözdü.

Umarım bu başka birine yardımcı olur.


3
Bu tam olarak benim sorunumdu. Dinamik olarak eklemek, projeyi gizemli bir şekilde bozdu.
SouthShoreAK

2
Benim için de aynısı, .NetStandard2.0 ile dinamik kullanarak, derlemesi için C # Nuget kurmam gerekiyordu
Mahmoud Hanafy

17

Ben de bugün bu durumla karşılaştım. Benim durumumda, .NET 4.0 uygulamamda Newton.Json.Net dll v3.5'e başvuruyordum. Bu kütüphaneyi bile kullanmadığımı fark ettim, bu yüzden onu referanslarımdan kaldırdıktan sonra artık bana derleyici hatası vermedi.

Sorun çözüldü!!!


2
Benim için de aynısı, soruna Newton.Json.Net dll neden oldu!
Julien Pierre

Benim durumumda nedeni Microsoft'un AntiXSSLibrary.dll'nin yanlış NET20 sürümüydü. NET35 ile değiştirildi - hata gitti.
Denis

7

Gerçek hata, hataya neden olan 2.0 derlemenizin bu kodu içermesinden kaynaklanır:

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

Yukarıdaki Kod, .NET 2.0 Derlemesinin uzantı yöntemlerini kullanmasına izin verir (bkz . .NET 2.0'da uzantı yöntemlerini kullanma? ). NET 4.0'ı hedeflerseniz ve bir 2.0 Derlemesine (yukarıdaki kodu içerir) başvurursanız, mscorlib.dll (4.0) aynı ad alanında aynı sınıfı içerdiğinden, derleyicinin kafasını karıştırır.

Bunu düzelttim

  • 4.0 hedefleme özniteliği olmadan orijinal 2.0 derlemesini tekrar derleyerek
  • montajı kaldırarak (belli ki)
  • derlediğiniz hedefe üçüncü bir Uzantı Özniteliği ekleyerek (başvurulan tanımları geçersiz kılıyor gibi görünüyor)

Bu tam olarak benim sorunum, talimatlarınızı deneyip geri göndereceğim.
JWP

6

Bu kodu projenizin herhangi bir yerine yazmak sorununuzu çözebilir. Benim için çalışıyor

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

bu kodu nereye yazıyorsun? projenin kökünde bir sınıf mı oluşturdunuz?
Alex

1
@Alex Aboce kodla projemin köküne CompilerService adlı bir sınıf ekledim ve işe yaradı. Güzel!
Halvard

4

.NET 4.0 projesinden başvurulan NLog.dll 2.0 da buna neden olabilir.


NET 3.5'ten referans alınan .NET 2.0 için NLog, benzer hatalar veriyor gibi görünüyor.
Pedro

3

Muhtemelen dynamic.NetStandard Sınıfı kitaplık projesinde anahtar sözcük kullanıyorsunuzdur . Öyleyse Microsoft.CSharp, projedeki kitaplığa bir referans eklemeniz gerekir . Umarım sorununuzu çözer.


2

Doğru bir çözümüm yok, ancak veri noktamı ekleyeceğim:

Benim durumumda hata GoogleSearchAPINet20'ye başvurmaktan kaynaklanıyor

İşte olanlar:

  • Oluşturan çözümü kapatıyorum
  • Çözümü tekrar açıyorum. Hala inşa ediyor
  • Herhangi bir değişiklik yapıp oluşturmayı denediğim anda, 19 "Eksik derleyici gerekli üye ..." hatası alıyorum
  • GoogleSearchAPINet20 referansını kaldırıyorum
  • Referansı GoogleSearchAPINet20'ye geri ekliyorum
  • Çözümü ben oluşturuyorum. Hatasız oluşturur
  • Visual Studio'm açık olduğu sürece artık kod değişiklikleri yapabilir, çözümle başka eylemleri doğru şekilde oluşturabilir veya gerçekleştirebilirim
  • Visual Studio'yu kapatıyorum
  • Birinci adımdan itibaren tekrarlayın

Çözümümde System.Core.dll dosyasını hiç referans almıyorum ve hedef çerçevem ​​.NET 4.

Bu noktada biraz sinirliyim ...


1

Zaman uyumsuz Görevleri .NET 4.0'a karşı kullanmaya çalışırken bu hatayı aldım. Hedef Çerçevenin 4.5.2'ye güncellenmesi sorunu çözdü.


1

Bir winforms projesine bazı eşzamansız yöntemler ekledikten sonra aynı istisna kümesine ulaştım. .NET sürümümü 4'ten 4,5'e yükseltmem gerekiyordu


0

Benim için, .net4.0 projemde async Task ile asynchronous method eklediğimde problem oluşuyor!

.NET-Framework 4.5'in önceki sürümlerinde, bu paketi yüklemeniz gerekir:

Install-package Microsoft.Bcl.Async –pre

veya

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

Nuget veya Nuget hakkında daha fazla bilgi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.