Dil özellikleri ve sürümleriyle ilgili hataları ve uyarıları düzeltme

Bu makale aşağıdaki derleyici hatalarını ve uyarılarını kapsar:

  • CS0171: Denetim çağırana döndürülmeden önce 'name' alanı tamamen atanmalıdır. Alanı otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS0188: 'this' nesnesi tüm alanları atanmadan önce kullanılamaz. Atanmamış alanları otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS0843: Denetim çağırana döndürülmeden önce otomatik uygulanan 'name' özelliği tam olarak atanmalıdır. Özelliği otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS1617: /langversion için geçersiz 'option' seçeneği. Desteklenen değerleri listelemek için '/langversion:?' kullanın.
  • CS1638: 'identifier' ayrılmış bir tanımlayıcıdır ve ISO dil sürümü modu kullanıldığında kullanılamaz
  • CS1738: Tüm sabit bağımsız değişkenler belirtildikten sonra adlandırılmış bağımsız değişken belirtimleri görünmelidir. İzlenmeyen adlandırılmış bağımsız değişkenlere izin vermek için lütfen dil sürümü 7.2 veya üzerini kullanın.
  • CS8021: RuntimeMetadataVersion için değer bulunamadı. System.Object içeren bir derleme bulunamadı veya RuntimeMetadataVersion için seçenekler aracılığıyla belirtilen bir değer bulunamadı.
  • CS8022: Özellik C# 1'de kullanılamaz. Lütfen dil sürümü 2 veya üzerini kullanın.
  • CS8023: Özellik C# 2'de kullanılamaz. Lütfen dil sürümü 3 veya üzerini kullanın.
  • CS8024: Özellik C# 3'te kullanılamaz. Lütfen 4 veya üzeri bir dil sürümü kullanın.
  • CS8025: Özellik C# 4'te kullanılamaz. Lütfen dil sürüm 5 veya üzerini kullanın.
  • CS8026: Özellik C# 5'te kullanılamaz. Lütfen dil sürümü 6 veya üzerini kullanın.
  • CS8058: 'özellik' özelliği deneyseldir ve desteklenmez; etkinleştirmek için '/features:feature' kullanın.
  • CS8059: Özellik C# 6'da kullanılamaz. Lütfen dil sürümü 7 veya üzerini kullanın.
  • CS8107: Özellik C# 7.0'da kullanılamaz. Lütfen dil sürümü 7.1 veya üzerini kullanın.
  • CS8192: Sağlanan dil sürümü desteklenmiyor veya geçersiz: 'value'.
  • CS8302: Özellik C# 7.1'de kullanılamaz. Lütfen dil sürümü 7.2 veya üzerini kullanın.
  • CS8303: Belirtilen dil sürümü 'value' baştaki sıfırlara sahip olamaz
  • CS8304: Derleyici sürümü: 'version'. Dil sürümü: sürüm.
  • CS8305: 'type' yalnızca değerlendirme amaçlıdır ve gelecekteki güncelleştirmelerde değiştirilebilir veya kaldırılmaya tabidir.
  • CS8306: 'name' demet öğesi adı çıkarılmaktadır. Bir öğeye çıkarılan adıyla erişmek için lütfen 7.1 veya daha yeni bir dil sürümü kullanın.
  • CS8314: 'type' türündeki bir ifade, C# sürümünde 'type' türündeki bir desen tarafından işlenemez. Lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS8320: Özellik C# 7.2'de kullanılamaz. Lütfen dil sürümü 7.3 veya üzerini kullanın.
  • CS8370: Özellik C# 7.3'te kullanılamaz. Lütfen dil sürümü 8 veya üzerini kullanın.
  • CS8371: Otomatik özelliklerdeki alan hedefli öznitelikler dil sürümü 7.3'te desteklenmez. Lütfen dil sürümü 8.0 veya üzerini kullanın.
  • CS8400: Özellik C# 8'de kullanılamaz. Lütfen dil sürümü 9 veya üzerini kullanın.
  • CS8401: İlişkili bir düz metin dizesi için '$@' yerine '@$' kullanmak için lütfen dil sürümü 8.0 veya üzerini kullanın.
  • CS8511: 'type' türündeki bir ifade, 'type' türündeki bir desen tarafından işlenemez. Açık bir türü sabit bir desenle eşleştirmek için lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS8627: Nullable bir tür parametresinin, dil sürümü 'version' veya üzeri kullanılmadığı sürece bir değer türü ya da null atanamaz başvuru türü olduğu bilinmelidir. Dil sürümünü değiştirmenizi veya 'class', 'struct' ya da bir tür kısıtlaması eklemeyi değerlendirmenizi öneririz.
  • CS8630: C# sürümü için geçersiz 'option' değeri: 'value'. Lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS8652: Özellik şu anda Önizleme aşamasındadır ve desteklenmiyor. Önizleme özelliklerini kullanmak için 'önizleme' dil sürümünü kullanın.
  • CS8701: Hedef çalışma zamanı varsayılan arabirim uygulamasını desteklemez.
  • CS8702: Hedef çalışma zamanı varsayılan arabirim uygulamasını desteklemediğinden 'member' 'member' arabirim üyesini 'type' türünde uygulayamaz.
  • CS8703: 'değiştirici' değiştiricisi C# sürümünde bu öğe için geçerli değil. Lütfen dil sürümü 8.0 veya üzerini kullanın.
  • CS8704: 'type', 'member' arabirim üyesini uygulamaz. 'type' C# sürümünde genel olmayan bir üyeyi örtük olarak uygulayamaz. Lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS8706: Bu özellik C# 7.3'te kullanılamadığından tür, bu türdeki arabirim üyesini uygulayamaz.
  • CS8707: Hedef çalışma zamanı, bir arabirimin üyesi için 'protected', 'protected internal' veya 'private protected' erişim düzeylerini desteklemez.
  • CS8773: Özellik C# 9'da kullanılamaz. Lütfen dil sürümü 10 veya üzerini kullanın.
  • CS8830: Hedef çalışma zamanı, geçersiz kılmalarda eşdeğişken dönüş türlerini desteklemez. Geçersiz kılınan 'member' üyesiyle eşleşmesi için dönüş türü 'type' olmalıdır.
  • CS8831: Hedef çalışma zamanı, geçersiz kılmalarda kovaryant türleri desteklemez. Geçersiz kılınan 'member' üyesiyle eşleşmesi için tür 'type' olmalıdır.
  • CS8888: 'yönetilen' çağrı kuralı yönetilmeyen çağrı kuralı tanımlayıcılarıyla birleştirilemez.
  • CS8889: Hedef çalışma zamanı genişletilebilir veya çalışma zamanı ortamı varsayılan çağırma kurallarını desteklemez.
  • CS8890: 'type' türü tanımlanmadı.
  • CS8891: Çağrı kuralı olarak kullanılabilmesi için 'type' türü genel olmalıdır.
  • CS8904: Geçersiz varyans: Dil sürümü 9.0 veya üzeri kullanılmadığı sürece tür parametresinin 'member' üzerinde sürekli olarak geçerli olması gerekir.
  • CS8912: Korumalı 'Object.ToString' ile bir kayıttan devralma C# 9.0'da desteklenmez. Lütfen dil sürümü 10.0 veya üzerini kullanın.
  • CS8919: Hedef çalışma zamanı arabirimlerdeki statik soyut üyeleri desteklemez.
  • CS8929: Hedef çalışma zamanı arabirimlerdeki statik soyut üyeleri desteklemediğinden 'method' 'type' türünde 'member' arabirim üyesini uygulayamaz.
  • CS8936: Özellik C# 10'da kullanılamaz. Lütfen 11 veya üzeri bir dil sürümü kullanın.
  • CS8957: 'type' ile 'type' arasında ortak bir tür bulunamadığından, koşullu ifade dil sürümü 8.0'da geçerli değil. Hedef türündeki dönüştürmeyi kullanmak için 9.0 veya üzeri bir dil sürümüne yükseltin.
  • CS8967: Verbatim olmayan bir enterpolasyonlu dize içindeki yeni satırlar C# 10.0'da desteklenmez. Lütfen 11.0 veya üzeri dil sürümünü kullanın.
  • CS9014: Muhtemelen atanmamış otomatik uygulanan 'name' özelliğinin kullanımı. Özelliği otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9015: Atanmamış olabilecek 'name' alanının kullanımı. Alanı otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9016: Muhtemelen atanmamış otomatik uygulanan 'name' özelliğinin kullanımı. Özelliği otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9017: Atanmamış olabilecek 'name' alanının kullanımı. Alanı otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9041: 'type', C# derleyicisinin bu sürümü tarafından desteklenmeyen 'feature' derleyici özelliğini gerektirir.
  • CS9058: Özellik C# 11'de kullanılamaz. Lütfen 12 veya üzeri bir dil sürümü kullanın.
  • CS9064: Hedef çalışma zamanı başvuru alanlarını desteklemez.
  • CS9103: 'type', tanınmayan RefSafetyRulesAttribute sürümüne sahip bir modülde tanımlanır ve '11' beklenir.
  • CS9171: Hedef çalışma zamanı satır içi dizi türlerini desteklemez.
  • CS9194: Değişken 'ref' anahtar sözcüğüyle geçirilemez. 'ref' değişkenlerini 'in' parametrelerine geçirmek için 12 veya üzeri dil sürümüne yükseltin.
  • CS9202: Özellik C# 12.0'da kullanılamaz. Lütfen 13 veya üzeri bir dil sürümü kullanın.
  • CS9204: 'type' yalnızca değerlendirme amaçlıdır ve gelecekteki güncelleştirmelerde değiştirilebilir veya kaldırılmaya tabidir. Devam etmek için bu tanılamayı gizleme.
  • CS9211: 'Experimental' özniteliğinin diagnosticId bağımsız değişkeni geçerli bir tanımlayıcı olmalıdır.
  • CS9240: Hedef çalışma zamanı, by-ref benzeri genel türleri desteklemez.
  • CS9260: Özellik C# 13.0'da kullanılamaz. Lütfen dil sürümü 14 veya üzerini kullanın.
  • CS9268: 'type' yalnızca değerlendirme amaçlıdır ve gelecekteki güncelleştirmelerde değiştirilebilir veya kaldırılmaya tabidir: 'message'. Devam etmek için bu tanılamayı gizleme.
  • CS9269: UnscopedRefAttribute yalnızca C# 11 veya sonraki sürümlerde ya da net7.0 veya üzerini hedeflerken geçerlidir.
  • CS9271: 'Microsoft.CodeAnalysis.EmbeddedAttribute' türü genel olmayan, internal, file olmayan, sealed, statik olmayan olmalı; parametresiz bir oluşturucuya sahip olmalı, System.Attribute'den türemeli ve herhangi bir türe uygulanabilir olmalıdır.
  • CS9327: Özellik C# 14.0'da kullanılamaz. Lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS9328: 'method' yöntemi, şu anda çalışma zamanı async tarafından desteklenmeyen bir özellik kullanıyor. Yöntemi 'System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)' özniteliğiyle işaretleyerek çalışma zamanı async kapsamı dışında bırakın.
  • CS9346: Güncelleştirme, açık arabirim uygulamasının oluşturulmasını gerektirir; bu, uygulama yeniden başlatılmadan çalışma zamanı tarafından desteklenmez.
  • CS9352: Hedef çalışma zamanı genişletilmiş düzen türlerini desteklemez.

Tüm bu hataların ve uyarıların ardındaki neden, derleyicinin veya çalışma zamanının kullandığınız bir özelliği desteklememesidir. Çözüm, sorunun dil sürümü yapılandırma sorunu mu, dil sürümü uyuşmazlığı mı, çalışma zamanı sınırlaması mı yoksa deneysel bir özellik mi olduğuna bağlıdır.

Dil sürümü yapılandırma hataları

  • CS1617: /langversion için geçersiz 'option' seçeneği. Desteklenen değerleri listelemek için '/langversion:?' kullanın.
  • CS1638: 'identifier' ayrılmış bir tanımlayıcıdır ve ISO dil sürümü modu kullanıldığında kullanılamaz
  • CS8192: Sağlanan dil sürümü desteklenmiyor veya geçersiz: 'value'.
  • CS8303: Belirtilen dil sürümü 'value' baştaki sıfırlara sahip olamaz
  • CS8304: Derleyici sürümü: 'version'. Dil sürümü: sürüm.

Bu hatalar, proje dosyanızdaki veya derleyici seçeneğindeki ayarın <LangVersion> geçersiz veya yüklü derleyiciyle uyumsuz olduğunu gösterir-langversion.

<LangVersion> Proje dosyanızdaki değeri geçerli bir dil sürüm dizesiyle (CS1617, CS8192, CS8303) düzeltin. Geçerli değerler arasında default, latest, preview, latestMajor veya 7.3, 8.0, 9.0, 10, 11, 12, 13 ya da 14 gibi belirli bir sürüm numarası bulunur. Sürüm numarasına baştaki sıfırları eklemeyin. Desteklenen değerlerin tam listesi için bkz. C# dil sürümü oluşturma .

Tip

Desteklenen dil sürümlerinin listesini görmek için bu makaledeki tabloya başvurun, -langversion:? ile derleyin veya derlemeden önce proje dosyanızda geçici olarak <LangVersion>?</LangVersion> ayarlayın.

.NET SDK'sını, derleyicisi belirttiğiniz dil sürümünü (CS8304) destekleyen bir sürüme güncelleştirin. C# derleyicisinin her sürümü, belirli bir üst sınıra kadar olan dil sürümlerini destekler. Derleyicinin desteklediğinden daha yeni bir dil sürümü belirtirseniz SDK'yı yükseltin.

Çift alt çizgili tanımlayıcıları kaldırın veya dil sürümünü ISO-1 ya da ISO-2 sürümünden daha yeni bir sürümle değiştirin (CS1638). ISO dil modları, __ (çift alt çizgi) içeren tanımlayıcıları, ISO C# spesifikasyonuna uygun olmadıkları için saklı tutar.

Note

Geçerli C# derleyicisi artık CS1638 üretmez. Eski derleyiciler, ISO-1 veya ISO-2 dil sürümleri kullanıldığında bu hatayı veriyordu.

Derleyici, varsayılan dil sürümünü hedef çerçeveden belirler:

Hedef Sürüm Varsayılan C# dil sürümü
.NET 11.x C# 15
.NET 10.x C# 14
.NET 9.x C# 13
.NET 8.x C# 12
.NET 7.x C# 11
.NET 6.x C# 10
.NET 5.x C# 9.0
.NET Çekirdeği 3.x C# 8.0
.NET Çekirdeği 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Çerçevesi tümü C# 7.3

öğesini proje dosyanızdan kaldırırsanız LangVersion , derleyici hedef çerçeveniz için varsayılan değeri kullanır. Daha yeni özellikleri etkinleştirmek için belirli bir sürüm de belirtebilirsiniz:

Değer Anlamı
preview Derleyici, en son önizleme sürümündeki tüm geçerli dil söz dizimini kabul eder.
latest Derleyici, derleyicinin en son yayımlanan sürümünden (küçük sürüm dahil) söz dizimini kabul eder.
latestMajor
veya default
Derleyici, en son yayımlanan derleyici ana sürümünün söz dizimini kabul eder.
15.0 Derleyici yalnızca C# 15 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
14.0 Derleyici yalnızca C# 14 veya daha düşük bir sürümde bulunan söz dizimini kabul eder.
13.0 Derleyici yalnızca C# 13 veya daha düşük bir sürümde bulunan söz dizimini kabul eder.
12.0 Derleyici yalnızca C# 12 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
11.0 Derleyici yalnızca C# 11 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
10.0 Derleyici yalnızca C# 10 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
9.0 Derleyici yalnızca C# 9 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
8.0 Derleyici yalnızca C# 8.0 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
7.3 Derleyici yalnızca C# 7.3 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
7.2 Derleyici yalnızca C# 7.2 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
7.1 Derleyici yalnızca C# 7.1 veya daha düşük bir sürüme dahil edilen söz dizimini kabul eder.
7 Derleyici yalnızca C# 7.0 veya daha düşük bir sürüme dahil edilen söz dizimini kabul eder.
6 Derleyici yalnızca C# 6.0 veya daha düşük bir sürüme dahil edilen söz dizimini kabul eder.
5 Derleyici yalnızca C# 5.0 veya daha düşük bir sürüme dahil edilen söz dizimini kabul eder.
4 Derleyici yalnızca C# 4.0 veya daha düşük bir sürüme dahil edilen söz dizimini kabul eder.
3 Derleyici yalnızca C# 3.0 veya daha düşük bir sürümde yer alan söz dizimini kabul eder.
ISO-2
veya 2
Derleyici yalnızca ISO/IEC 23270:2006 C# (2.0) içinde yer alan söz dizimini kabul eder.
ISO-1
veya 1
Derleyici yalnızca ISO/IEC 23270:2003 C# (1.0/1.2) içinde yer alan söz dizimini kabul eder.

Her çerçeve sürümü için desteklenen dil sürümleri hakkında daha fazla bilgi edinmek için dil başvurusu bölümündeki Dil sürümünü yapılandırma bölümüne bakın.

Özellik dil sürümünde kullanılamıyor

  • CS1738: Tüm sabit bağımsız değişkenler belirtildikten sonra adlandırılmış bağımsız değişken belirtimleri görünmelidir.
  • CS8022, CS8023, CS8024, CS8025, CS8026, CS8059, CS8107, CS8302, CS8320, CS8370, CS8400, CS8773, CS8936, CS9058, CS9202, CS9260, CS9327: Özellik C# X'te kullanılamaz. Lütfen Y veya üzeri bir dil sürümü kullanın.
  • CS8306: Demet öğesi adı türetilir. Bir öğeye türetilen adıyla erişmek için lütfen 7.1 veya sonraki bir dil sürümünü kullanın.
  • CS8314: 'type' türündeki bir ifade, C# sürümünde 'type' türündeki bir desen tarafından işlenemez. Lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS8371: Otomatik özelliklerdeki alan hedefli öznitelikler dil sürümü 7.3'te desteklenmez.
  • CS8401: İlişkili bir düz metin dizesi için '$@' yerine '@$' kullanmak için lütfen dil sürümü 8.0 veya üzerini kullanın.
  • CS8511: 'type' türündeki bir ifade, 'type' türündeki bir desen tarafından işlenemez. Açık bir türü sabit bir desenle eşleştirmek için lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS8627: 'version' veya üzeri dil sürümü kullanılmadığı sürece, boş değer atanabilir bir tür parametresinin bir değer türü ya da null atanamayan bir başvuru türü olduğu bilinmelidir. Dil sürümünü değiştirmeyi veya 'class', 'struct' ya da tür kısıtlaması eklemeyi göz önünde bulundurun.
  • CS8630: C# sürümü için geçersiz 'option' değeri: 'value'. Lütfen 'version' veya üzeri dil sürümünü kullanın.
  • CS8703: 'değiştirici' değiştiricisi C# sürümünde bu öğe için geçerli değil.
  • CS8704: 'type', 'member' arabirim üyesini uygulamaz. 'type', genel olmayan bir üyeyi örtük olarak uygulayamaz.
  • CS8706: Bu sürümde kullanılamayan bir özellik nedeniyle tür, arabirim üyesini uygulayamaz.
  • CS8904: Geçersiz varyans: Dil sürümü 9.0 veya üzeri kullanılmadığı sürece tür parametresinin 'member' üzerinde sürekli olarak geçerli olması gerekir.
  • CS8912: Korumalı 'Object.ToString' ile bir kayıttan devralma C# 9.0'da desteklenmez.
  • CS8957: Türler arasında ortak bir tür bulunamadığından, koşullu ifade dil sürümü 8.0'da geçerli değil.
  • CS8967: Verbatim olmayan bir enterpolasyonlu dize içindeki yeni satırlar C# 10.0'da desteklenmez.
  • CS9194: Argüman, 'ref' anahtar sözcüğüyle geçirilemez. 'ref' argümanlarını 'in' parametrelerine geçirmek için dil sürümünü 12 veya üzeri bir sürüme yükseltin.

Bu hataların tümü, projenizin şu anda hedeflemekte olduğundan daha yeni bir C# sürümü gerektiren bir dil özelliği kullandığınızı gösterir. Bu hataları çözmek için aşağıdaki seçeneklerden birini kullanın:

  • Derleyicinin gerekli dil sürümünü otomatik olarak seçmesi için hedef çerçeveyi yükseltin. Her hedef çerçeve varsayılan bir C# sürümüne eşlenir. Örneğin, .NET 8 varsayılan olarak C# 12, .NET 9 varsayılan olarak C# 13 ve .NET 10 varsayılan olarak C# 14 olur. Tam eşleme için Dil sürümü yapılandırma hataları'ndaki tabloya bakın.

  • <LangVersion> Proje dosyanızdaki öğesini gerekli sürüme veya daha yüksek bir sürüme ayarlayın. Örneğin, C# 12 özelliklerini etkinleştirmek için proje dosyanızdaki bir <PropertyGroup> öğesine <LangVersion>12</LangVersion> ekleyin.

Yükseltemiyorsanız, hatayı tetikleyen özellikten kaçının. Hata iletisi, özelliğin adını ve gereken sürümü belirtir. Aşağıdaki liste belirli hatalar için ek bağlam sağlar:

  • Tüm argümanları açıkça adlandırarak kullanın veya sonda yer almayan adlandırılmış argümanları kullanmak için C# 7.2 ya da daha yeni bir sürüme yükseltin (CS1738).
  • Demet öğelerine, çıkarılan ad yerine bildirilen adlarıyla erişin veya C# 7.1 ya da sonraki bir sürüme yükseltin (CS8306).
  • C# 8.0’dan önceki sürümlerde enterpolasyonlu sabit dizeler için @$"..." yerine $@"..." kullanın (CS8401).
  • Boş değer atanabilir tür parametrelerine açık tür kısıtlamaları ekleyin veya bu gereksinimi (CS8627) rahatlatan C# 9 veya sonraki bir sürüme yükseltin.
  • Boş değer atanabilir ek açıklamaları ve boş değer atanabilir bağlamı (CS8630) etkinleştirmek için C# 8.0 veya sonraki bir sürüme yükseltin.
  • İki dalın ortak türü olmayan koşullu ifadelere açık atamalar ekleyin veya hedef türündeki koşullu ifadeler için C# 9 veya sonraki bir sürüme yükseltin (CS8957).
  • Yeni çizgileri ilişkilendirilmiş dize ifadelerinin dışına taşıyın veya C# 11 veya sonraki bir sürüme (CS8967) yükseltin.
  • Bağımsız değişkenleri in parametrelere geçirirken yerine ref anahtar sözcüğünü in kullanın veya C# 12 veya sonraki bir sürüme (CS9194) yükseltin.
  • Ortak olmayan arabirim üyelerini örtük olarak değil açıkça uygulayın veya C# 9 veya sonraki bir sürüme (CS8704) yükseltin.

Hedef çalışma zamanı özelliği desteklemiyor

  • CS8021: RuntimeMetadataVersion için değer bulunamadı.
  • CS8701: Hedef çalışma zamanı varsayılan arabirim uygulamasını desteklemez.
  • CS8702: Hedef çalışma zamanı varsayılan arabirim uygulamasını desteklemediğinden 'member' türündeki arabirim üyesini uygulayamıyor.
  • CS8707: Hedef çalışma zamanı, bir arabirim üyesi için 'protected', 'protected internal' veya 'private protected' erişilebilirliğini desteklemiyor.
  • CS8830: Hedef çalışma zamanı, override'larda eşvaryanslı dönüş türlerini desteklemez.
  • CS8831: Hedef çalışma zamanı, geçersiz kılmalarda kovaryant türleri desteklemez.
  • CS8889: Hedef çalışma zamanı genişletilebilir veya çalışma zamanı ortamı varsayılan çağırma kurallarını desteklemez.
  • CS8919: Hedef çalışma zamanı arabirimlerdeki statik soyut üyeleri desteklemez.
  • CS8929: Hedef çalışma zamanı arabirimlerdeki statik soyut üyeleri desteklemediğinden 'method' 'type' türünde 'member' arabirim üyesini uygulayamaz.
  • CS9041: 'type', C# derleyicisinin bu sürümü tarafından desteklenmeyen 'feature' derleyici özelliğini gerektirir.
  • CS9064: Hedef çalışma zamanı ref alanlarını desteklemiyor.
  • CS9103: 'type', tanınmayan RefSafetyRulesAttribute sürümüne sahip bir modülde tanımlanır ve '11' beklenir.
  • CS9171: Hedef çalışma zamanı satır içi dizi türlerini desteklemez.
  • CS9240: Hedef çalışma zamanı başv benzeri genel değerleri desteklemez.
  • CS9328: 'method' yöntemi, şu anda çalışma zamanı eşzamansızlığı tarafından desteklenmeyen bir özellik kullanıyor. Yöntemi 'System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)' özniteliğiyle işaretleyerek çalışma zamanı eşzamansızlığının dışında bırakın.
  • CS9346: Güncelleştirme, açık arabirim uygulamasının oluşturulmasını gerektiriyor; bu işlem, uygulama yeniden başlatılmadan çalışma zamanı tarafından desteklenmez.
  • CS9352: Hedef çalışma zamanı genişletilmiş düzen türlerini desteklemez.

Bu hatalar dil sürümü hatalarından farklıdır çünkü tek başına yükseltme <LangVersion> bunları çözmez. <TargetFramework> ile belirtilen hedef çalışma zamanı da CLR/çalışma zamanı düzeyinde bu özelliği desteklemelidir.

<TargetFramework> proje dosyanızdaki öğesini gerekli özelliği destekleyen bir sürüme yükseltin. Aşağıdaki listede hangi özelliklerin hangi minimum çalışma zamanını gerektirdiği gösterilmektedir:

  • Korumalı erişim dahil varsayılan arabirim uygulaması (CS8701, CS8702, CS8707): .NET Core 3.0 / .NET 5+ gerektirir.
  • Arabirimlerdeki statik soyut üyeler (CS8919, CS8929): 7+ .NET gerektirir.
  • Kovaryan dönüş türleri (CS8830, CS8831): 5+ .NET gerektirir.
  • Ref alanları (CS9064): .NET 7+ gerektirir.
  • Satır içi dizi türleri (CS9171): 8+ .NET gerektirir.
  • Başvuru benzeri jenerikler (CS9240): .NET 9 veya üzerini gerektirir.
  • Genişletilmiş düzen türleri (CS9352): 10+ .NET gerektirir.
  • Genişletilebilir çağrı kuralları (CS8889): 5+ .NET gerektirir.
  • Çalışma zamanı asenkron özellikleri (CS9328): .NET 10 veya üzerini gerektirir.

Derleyicinin kendisi gerekli bir derleyici özelliğini (CS9041) desteklemiyorsa .NET SDK'sını güncelleştirin. Bu hata, başvuruda bulunılan bir kitaplığın daha yeni bir derleyici sürümü gerektiren meta veri özelliklerini kullandığını gösterir.

Çekirdek çalışma zamanı kitaplığına geçerli bir başvuru olduğundan emin olun (CS8021). Bu uyarı genellikle standart çalışma zamanı başvurusu olmadan oluştururken görünür. Bir RuntimeMetadataVersion seçenek belirtin veya içeren System.Objectbir derlemeye başvuru ekleyin.

Bağımlı modülleri uyumlu bir derleyici sürümüyle (RefSafetyRulesAttribute) yeniden derleyerek sürüm uyuşmazlıklarını çözün.

Bu hatayla anında yeniden yükleme sırasında karşılaşırsanız uygulamayı yeniden başlatın (CS9346). Çalışma zamanı gerekli açık arabirim uygulamalarını dinamik olarak yayamadığından bazı düzenleme ve devam etme değişiklikleri yeniden başlatma gerektirir.

İşlev işaretçisi ve çağırma kuralı hataları

  • CS8888: 'yönetilen' çağrı kuralı yönetilmeyen çağrı kuralı tanımlayıcılarıyla birleştirilemez.
  • CS8889: Hedef çalışma zamanı genişletilebilir veya çalışma zamanı ortamı varsayılan çağırma kurallarını desteklemez.
  • CS8890: 'type' türü tanımlanmadı.
  • CS8891: Çağrı kuralı olarak kullanılabilmesi için 'type' türü genel olmalıdır.

Bu hatalar, C# 9'da tanıtılan işlev işaretçisi bildirimleri ve çağrı kuralı tanımlayıcılarıyla ilgilidir.

Yönetilmeyen tanımlayıcıları da (managed) içeren çağırma kuralı tanımlayıcı listelerinden kaldırın. Çağırma managed kuralı varsayılandır ve , unmanaged, Cdeclveya Stdcallgibi Thiscalltanımlayıcılarla Fastcall birleştirilemiyor.

Genişletilebilir veya çalışma zamanı varsayılan çağırma kurallarını (CS8889) kullanmak için hedef çerçeveyi .NET 5 veya sonraki bir sürüme yükseltin. UnmanagedCallersOnly özniteliği ve genişletilebilir çağırma kuralı türleri, .NET Core 3.1 veya önceki sürümlerde bulunmayan çalışma zamanı desteği gerektirir.

Çağrı kuralı türünün başvuruda bulunan derlemelerde (CS8890) mevcut olduğundan emin olun. CallConvCdecl, CallConvStdcall, CallConvThiscall ve CallConvFastcall gibi çağırma kuralı türleri System.Runtime.CompilerServices içinde tanımlanır. Tür bulunamazsa, doğru çalışma zamanı kitaplığını başvuru olarak ekleyin.

Özel çağrı kuralı türleri public (CS8891) yapın. Özel bir çağrı kuralı türü tanımlarsanız, bunu işlev işaretçisi türü bildiriminde kullanmak için olarak public bildirin.

Deneysel ve önizleme özellikleri

  • CS8058: 'özellik' özelliği deneyseldir ve desteklenmez; etkinleştirmek için '/features:feature' kullanın.
  • CS8305: 'type' yalnızca değerlendirme amaçlıdır ve gelecekteki güncelleştirmelerde değiştirilebilir veya kaldırılmaya tabidir.
  • CS8652: Özellik şu anda Önizleme aşamasındadır ve desteklenmiyor. Önizleme özelliklerini kullanmak için 'önizleme' dil sürümünü kullanın.
  • CS9204: 'type' yalnızca değerlendirme amaçlıdır ve gelecekteki güncelleştirmelerde değiştirilebilir veya kaldırılmaya tabidir. Devam etmek için bu tanılamayı gizleme.
  • CS9211: 'Experimental' özniteliğinin diagnosticId bağımsız değişkeni geçerli bir tanımlayıcı olmalıdır.
  • CS9268: 'type' yalnızca değerlendirme amaçlıdır ve gelecekteki güncelleştirmelerde değiştirilebilir veya kaldırılmaya tabidir: 'message'. Devam etmek için bu tanılamayı gizleme.

Bu tanılamalar, deneysel olarak işaretlenmiş veya yalnızca önizleme dili sürümünde kullanılabilen bir özellik veya tür kullandığınızı gösterir.

Uyarı

Deneysel özellikler değişebilir. API'ler değişebilir veya gelecekteki güncelleştirmelerde kaldırılabilir. Deneysel özellikleri dahil etmek, kitaplık yazarlarının gelecekteki gelişime yönelik fikirler ve kavramlar hakkında geri bildirim almalarının bir yoludur. Deneysel olarak işaretlenmiş herhangi bir özelliği kullanırken çok dikkatli olun.

Önizleme dili özelliklerini (<LangVersion>preview</LangVersion>) kullanmak için proje dosyanızda ayarlayın. Önizleme özellikleri henüz sonlandırılmamıştır ve gelecek sürümlerde değişebilir.

API'nin deneysel niteliğini (CS8058, CS8305, CS9204, CS9268) onaylamak için belirli tanılama kimliğini gizleme. Kitaplık yazarları, API'lerin değişikliğe tabi olduğunu belirtmek için bunları System.Diagnostics.CodeAnalysis.ExperimentalAttribute ile işaretler. #pragma warning disable kullanarak veya proje dosyanızdaki <NoWarn> içine tanılama kimliğini ekleyerek tanılamayı bastırabilirsiniz.

[Experimental] öğesine yönelik diagnosticId bağımsız değişkeninin geçerli bir C# tanımlayıcısı olduğundan emin olun (CS9211). Tanımlayıcının standart adlandırma kurallarına uyması gerekir. Boşluk, özel karakter içeremez veya bir rakamla başlayamaz. System.Diagnostics.CodeAnalysis.ExperimentalAttribute kullanarak kendi deneysel özelliklerinizi de tanımlayabilirsiniz.

Yapı (struct) başlatmada uyumsuzluk yaratan değişiklikler

  • CS0171, CS8881: Denetim çağırana döndürülmeden önce 'ad' alanı tamamen atanmalıdır. Alanı otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS0188, CS8885: 'this' nesnesi tüm alanları atanmadan önce kullanılamaz. Atanmamış alanları otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS0843, CS8880: Denetim çağırana döndürülmeden önce otomatik uygulanan 'name' özelliği tam olarak atanmalıdır. Özelliği otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9014: Muhtemelen atanmamış otomatik uygulanan 'name' özelliğinin kullanımı. Özelliği otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9015: Atanmamış olabilecek 'name' alanının kullanımı. Alanı otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9016: Muhtemelen atanmamış otomatik uygulanan 'name' özelliğinin kullanımı. Özelliği otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.
  • CS9017: Atanmamış olabilecek 'name' alanının kullanımı. Alanı otomatik olarak varsayılan olarak ayarlamak için 'version' dil sürümüne güncelleştirmeyi göz önünde bulundurun.

Bu hatalar ve uyarılar, struct türlerinin alanlarına erişilmeden önce doğru şekilde başlatılmasını sağlamaya yardımcı olur. C# öğesinin önceki sürümlerinde, herhangi bir oluşturucudaki bir yapıdaki tüm alanları açıkça atamanız gerekir. Parametresiz oluşturucu tüm alanları varsayılan değerlerine başlatır. Sonraki sürümlerde, tüm oluşturucular tüm alanları başlatır. Alan açıkça ayarlanır, alan başlatıcıda ayarlanır veya varsayılan değerine ayarlanır.

Tüm struct oluşturucularının tüm alanlara otomatik olarak varsayılan değer ataması yapması için C# 11 veya daha yeni bir sürüme yükseltin (CS0171, CS0188, CS0843 ve bunların daha yeni karşılıkları CS8880, CS8881 ve CS8885). C# 11’den itibaren derleyici, bir kurucuda açıkça ayarlanmamış tüm alanları varsayılan değerleriyle otomatik olarak başlatır.

C# 11'e (: this(), CS0188, CS0843) yükseltemiyorsanız yapı oluşturucunuzda kullanarak varsayılan oluşturucuyu açıkça çağırın. Bu yaklaşım, oluşturucu gövdesi çalışmadan önce tüm alanların varsayılan değerlerini almasını sağlar:

struct S
{
    public int AIProp { get; set; }
    public S(int i) : this() // Ensures all fields are initialized
    {
        AIProp = i;
    }
}

Oluşturucuyu kullanmadan this veya döndürmeden önce tüm alanları ve otomatik özellikleri atayın (CS9014, CS9015, CS9016, CS9017). Bu tanılamalar, daha yeni bir derleyici, bir özellik veya alan atanmadan önce onu okuyor olabileceğinizi tespit ettiğinde ortaya çıkar. Açıkça bir değer atayın veya otomatik varsayılan ayarın uyarıyı ortadan kaldırdığı bir sürüme yükseltin.

Uygulamaya özgü öznitelikler

  • CS9269: UnscopedRefAttribute yalnızca C# 11 veya sonraki sürümlerde ya da net7.0 veya üzerini hedeflerken geçerlidir.
  • CS9271: 'Microsoft.CodeAnalysis.EmbeddedAttribute' türü generic olmayan, internal, dosya kapsamlı olmayan, sealed, statik olmayan olmalı; parametresiz bir oluşturucuya sahip olmalı, System.Attribute'ten türemeli ve herhangi bir türe uygulanabilmelidir.

Bu hatalar, derleyici tarafından oluşturulan veya belirli çalışma zamanı sürümlerine bağlı özniteliklerle ilgilidir.

UnscopedRefAttribute (CS9269) kullanmak için C# 11 ve .NET 7 veya sonraki sürümlere yükseltin. Bu öznitelik, bir ref dönüş veya ref struct parametrenin kapsamı belirlenmiş bir yaşam süresi olmadığını gösterir. En düşük gereksinimleri karşılamak için hem dil sürümünü hem de hedef çerçeveyi gerektirir.

Microsoft.CodeAnalysis.EmbeddedAttribute (CS9271) öğesini manuel olarak bildirmeyin. Derleyici gerektiğinde bu özniteliğin kaynağını otomatik olarak oluşturur. Bu ada sahip el ile bildirilen bir türünüz varsa, derleyici tarafından oluşturulan sürümle çakışmasını önlemek için bunu kaldırın veya yeniden adlandırın.