Dil özelliği kuralları için C# Derleyici Seçenekleri

Aşağıdaki seçenekler, derleyicinin dil özelliklerini nasıl yorumlayacını denetler. Yeni MSBuild söz dizimi Kalın olarak gösterilir. Eski csc.exe söz dizimi içinde code stylegösterilir.

  • CheckForOverflowUnderflow / -checked: Taşma denetimleri oluşturun.
  • AllowUnsafeBlocks / -unsafe: 'güvenli olmayan' koda izin verin.
  • DefineConstants / -define: Koşullu derleme sembollerini tanımlayın.
  • LangVersion / -langversion: (en son ana sürüm) veya latest (ikincil sürümler de dahil olmak üzere en son sürüm) gibi default dil sürümünü belirtin.
  • Null atanabilir / -nullable: Boş değer atanabilir bağlamı veya null atanabilir uyarıları etkinleştirin.

CheckForOverflowUnderflow

CheckForOverflowUnderflow seçeneği, tamsayı aritmetik taşması durumunda program davranışını tanımlayan varsayılan taşma denetimi bağlamını denetler.

<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>

CheckForOverflowUnderflow olduğundatrue, varsayılan bağlam denetlenen bir bağlamdır ve taşma denetimi etkinleştirilir; aksi takdirde, varsayılan bağlam denetlenmeyen bir bağlamdır. Bu seçeneğin varsayılan değeri, falseyani taşma denetiminin devre dışı bırakıldığını gösterir.

Ayrıca ve unchecked deyimlerini kullanarak kodunuzun bölümleri için taşma denetimi bağlamını checked açıkça denetleyebilirsiniz.

Taşma denetimi bağlamı işlemleri nasıl etkiler ve hangi işlemlerin etkilendiği hakkında bilgi için ve unchecked deyimleri hakkındaki checked makaleye bakın.

AllowUnsafeBlocks

AllowUnsafeBlocks derleyici seçeneği, derlemek için güvenli olmayan anahtar sözcüğü kullanan koda izin verir. Bu seçeneğin varsayılan değeri olan false, güvenli olmayan koda izin verilmediğinden.

<AllowUnsafeBlocks>true</AllowUnsafeBlocks>

Güvenli olmayan kod hakkında daha fazla bilgi için bkz . Güvenli Olmayan Kod ve İşaretçiler.

DefineConstants

DefineConstants seçeneği, programınızın tüm kaynak kodu dosyalarındaki simgeleri tanımlar.

<DefineConstants>name;name2</DefineConstants>

Bu seçenek, tanımlamak istediğiniz bir veya daha fazla simgenin adını belirtir. DefineConstants seçeneği, derleyici seçeneğinin projedeki tüm dosyalar için geçerli olması dışında #define önişlemci yönergesi ile aynı etkiye sahiptir. Kaynak dosyadaki bir #undef yönergesi tanımı kaldırana kadar kaynak dosyada bir simge tanımlanır. seçeneğini kullandığınızda -define , bir dosyadaki yönergenin #undef projedeki diğer kaynak kodu dosyaları üzerinde hiçbir etkisi olmaz. Kaynak dosyaları koşullu olarak derlemek için bu seçenek tarafından oluşturulan simgeleri #if, #else, #elif ve #endif kullanabilirsiniz. C# derleyicisinin kendisi, kaynak kodunuzda kullanabileceğiniz hiçbir simge veya makro tanımlamaz; tüm sembol tanımları kullanıcı tanımlı olmalıdır.

Not

C# #define yönergesi, C++ gibi dillerde olduğu gibi bir simgeye değer verilmesine izin vermez. Örneğin, #define makro oluşturmak veya sabit tanımlamak için kullanılamaz. Sabit tanımlamanız gerekiyorsa bir enum değişken kullanın. C++ stilinde bir makro oluşturmak istiyorsanız, genel değerler gibi alternatifleri göz önünde bulundurun. Makrolar kötü bir hataya eğilimli olduğundan, C# kullanımına izin vermez ancak daha güvenli alternatifler sağlar.

LangVersion

C# derleyicisinin varsayılan dil sürümü, uygulamanızın hedef çerçevesine ve yüklü SDK veya Visual Studio sürümüne bağlıdır. Bu kurallar C# dil sürümü oluşturmada tanımlanır.

Uyarı

öğesinin LangVersion olarak latest ayarlanması önerilmez. ayarı, latest yüklenen derleyicinin en son sürümünü kullandığı anlamına gelir. Bu, makineden makineye değişerek derlemeleri güvenilir hale getiremez. Buna ek olarak, geçerli SDK'da yer almamış çalışma zamanı veya kitaplık özellikleri gerektirebilecek dil özelliklerini etkinleştirir.

LangVersion seçeneği, derleyicinin yalnızca belirtilen C# dil belirtimine dahil edilen söz dizimini kabul etmesine neden olur, örneğin:

<LangVersion>9.0</LangVersion>

Aşağıdaki değerler geçerlidir:

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 (ikincil sürüm dahil) söz dizimini kabul eder.
latestMajor
veya default
Derleyici, derleyicinin en son yayımlanan ana sürümünden 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.

Dikkat edilmesi gereken noktalar

  • Projenizin hedef çerçeveniz için önerilen varsayılan derleyici sürümünü kullandığından emin olmak için LangVersion seçeneğini kullanmayın. Daha yeni dil özelliklerine erişmek için hedef çerçeveyi güncelleştirebilirsiniz.

  • Değerle LangVersion belirtilmesi default , LangVersion seçeneğinin atlanmasından farklıdır. Belirtme, default hedef çerçeveyi hesaba katmadan derleyicinin desteklediği dilin en son sürümünü kullanır. Örneğin, Visual Studio sürüm 17.6'dan .NET 6'yı hedefleyen bir proje oluştururken, LangVersion belirtilmezse C# 10 kullanılır ancak LangVersion olarak ayarlanırsa defaultC# 11 kullanılır.

  • C# uygulamanız tarafından başvuruda bulunan meta veriler LangVersion derleyici seçeneğine tabi değildir.

  • C# derleyicisinin her sürümü dil belirtiminin uzantılarını içerdiğinden, LangVersion size derleyicinin önceki bir sürümünün eşdeğer işlevselliğini sunmaz.

  • C# sürüm güncelleştirmeleri genel olarak büyük .NET sürümleriyle aynı olsa da, yeni söz dizimi ve özelliklerin bu belirli çerçeve sürümüne bağlı olması şart değildir. Belirli her özelliğin, NuGet paketlerini veya diğer kitaplıkları dahil ederek alt düzey çerçevelerde çalışmasına izin verebilen kendi en düşük .NET API'si veya ortak dil çalışma zamanı gereksinimleri vardır.

  • Hangi LangVersion ayarını kullandığınızdan bağımsız olarak, .exe veya .dll oluşturmak için ortak dil çalışma zamanının geçerli sürümünü kullanın. Bir özel durum, -langversion:ISO-1 altında çalışan arkadaş derlemeleri ve ModuleAssemblyName'dir.

C# dil sürümünü belirtmenin diğer yolları için bkz . C# dil sürümü oluşturma.

Bu derleyici seçeneğini program aracılığıyla ayarlama hakkında bilgi için bkz LanguageVersion. .

C# dili belirtimi

Sürüm Bağlantı Açıklama
C# 8.0 ve üzeri PDF'i indirme C# Dil Belirtimi Sürüm 7: .NET Foundation
C# 7.3 PDF'i indirme Standart ECMA-334 7. Sürüm
C# 6.0 PDF'i indirme Standart ECMA-334 6. Sürüm
C# 5.0 PDF'i indirin Standart ECMA-334 5. Sürüm
C# 3.0 DOC'ı indirin C# Dil Belirtimi Sürüm 3.0: Microsoft Corporation
C# 2.0 PDF'i indirin Standart ECMA-334 4. Sürüm
C# 1.2 DOC'ı indirin Standart ECMA-334 2. Sürüm
C# 1.0 DOC'ı indirin Standart ECMA-334 1. Sürüm

Tüm dil özelliklerini desteklemek için gereken en düşük SDK sürümü

Aşağıdaki tabloda, ilgili dil sürümünü destekleyen C# derleyicisi ile SDK'nın en düşük sürümleri listelenmektedir:

C# sürümü En düşük SDK sürümü
C# 12 Microsoft Visual Studio/Derleme Araçları 2022 sürüm 17.8 veya .NET 8 SDK
C# 11 Microsoft Visual Studio/Derleme Araçları 2022 sürüm 17.4 veya .NET 7 SDK
C# 10 Microsoft Visual Studio/Derleme Araçları 2022 veya .NET 6 SDK
C# 9.0 Microsoft Visual Studio/Derleme Araçları 2019 sürüm 16.8 veya .NET 5 SDK
C# 8.0 Microsoft Visual Studio/Derleme Araçları 2019, sürüm 16.3 veya .NET Core 3.0 SDK
C# 7.3 Microsoft Visual Studio/Derleme Araçları 2017, sürüm 15.7
C# 7.2 Microsoft Visual Studio/Derleme Araçları 2017, sürüm 15.5
C# 7.1 Microsoft Visual Studio/Derleme Araçları 2017, sürüm 15.3
C# 7.0 Microsoft Visual Studio/Derleme Araçları 2017
C# 6 Microsoft Visual Studio/Derleme Araçları 2015
C# 5 Microsoft Visual Studio/Derleme Araçları 2012 veya paketlenmiş .NET Framework 4.5 derleyicisi
C# 4 Microsoft Visual Studio/Derleme Araçları 2010 veya paketlenmiş .NET Framework 4.0 derleyicisi
C# 3 Microsoft Visual Studio/Derleme Araçları 2008 veya paketlenmiş .NET Framework 3.5 derleyicisi
C# 2 Microsoft Visual Studio/Derleme Araçları 2005 veya paketlenmiş .NET Framework 2.0 derleyicisi
C# 1.0/1.2 Microsoft Visual Studio/Derleme Araçları .NET 2002 veya paketlenmiş .NET Framework 1.0 derleyicisi

Null Atanabilir

Null atanabilir seçeneği, null atanabilir bağlamı belirtmenize olanak tanır. Aşağıdaki etiket kullanılarak projenin yapılandırmasında <Nullable> ayarlanabilir:

<Nullable>enable</Nullable>

Bağımsız değişken , , disablewarningsveya annotations' lerden enablebiri olmalıdır. enable bağımsız değişkeni null atanabilir bağlamı etkinleştirir. Belirtilmesi disable , null atanabilir bağlamı devre dışı bırakır. Bağımsız değişkenini belirttiğinizde warnings , null atanabilir uyarı bağlamı etkinleştirilir. Bağımsız değişkeni belirttiğinizde annotations , boş değer atanabilir ek açıklama bağlamı etkinleştirilir. Değerler Null atanabilir bağlamlar makalesinde açıklanmıştır ve açıklanmıştır. Boş değer atanabilir geçiş stratejileri makalemizde mevcut bir kod tabanında null atanabilir başvuru türlerini etkinleştirmeyle ilgili görevler hakkında daha fazla bilgi edinebilirsiniz.

Not

Değer ayarlı olmadığında varsayılan değer disable uygulanır, ancak .NET 6 şablonları varsayılan olarak Null atanabilir değeri olarak enableayarlanır.

Akış analizi yürütülebilir kod içindeki değişkenlerin null atanabilirliğini çıkarsamak için kullanılır. Bir değişkenin çıkarsanan null atanabilirliği, değişkenin bildirilen null atanabilirlik özelliğinden bağımsızdır. Yöntem çağrıları koşullu olarak atlandığında bile analiz edilir. Örneğin, Debug.Assert yayın modunda.

Aşağıdaki özniteliklerle ek açıklamalı yöntemlerin çağrılması akış analizini de etkiler:

Önemli

Genel null atanabilir bağlam, oluşturulan kod dosyaları için geçerli değildir. Bu ayardan bağımsız olarak, oluşturulan olarak işaretlenmiş tüm kaynak dosyalarda null atanabilir bağlam devre dışı bırakılır . Bir dosyanın oluşturuldu olarak işaretlenmesinin dört yolu vardır:

  1. .editorconfig içinde, bu dosyaya uygulanan bir bölümde belirtin generated_code = true .
  2. Dosyanın en üstüne bir açıklama ekleyin <auto-generated> veya <auto-generated/> ekleyin. Bu açıklamadaki herhangi bir satırda olabilir, ancak açıklama bloğu dosyadaki ilk öğe olmalıdır.
  3. Dosya adını TemporaryGeneratedFile_ ile başlatma
  4. Dosya adını .designer.cs, .generated.cs, .g.cs veya .g.i.cs ile sonlandırın.

Oluşturucular ön işlemci yönergesini #nullable kullanarak kabul edebilir.