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 simgelerini 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 boş değer 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 denetlenmiş 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ğlamlarının işlemleri nasıl etkilediği 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 , falsegüvenli olmayan koda izin verilmediğinden kaynaklanır.

<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 bir simge kaynak dosyada tanımlanmaya devam eder. seçeneğini kullandığınızda -define , bir dosyadaki yönergenin #undef projedeki diğer kaynak kod dosyaları üzerinde hiçbir etkisi olmaz. Kaynak dosyaları koşullu olarak derlemek için #if, #else, #elif ve #endif ile bu seçenek tarafından oluşturulan simgeleri kullanabilirsiniz. C# derleyicisi, 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++ stili bir makro oluşturmak istiyorsanız, genel tür gibi alternatifleri göz önünde bulundurun. Makrolar hatalı olduğundan, C# kullanımlarına izin vermez ancak daha güvenli alternatifler sağlar.

LangVersion

Derleyicinin yalnızca seçilen C# dil belirtimine dahil edilen söz dizimini kabul etmelerine neden olur.

<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.
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 altındaki söz dizimini kabul eder.
7.2 Derleyici yalnızca C# 7.2 veya altındaki söz dizimini kabul eder.
7.1 Derleyici yalnızca C# 7.1 veya altındaki söz dizimini kabul eder.
7 Derleyici yalnızca C# 7.0 veya altındaki söz dizimini kabul eder.
6 Derleyici yalnızca C# 6.0 veya altındaki söz dizimini kabul eder.
5 Derleyici yalnızca C# 5.0 veya altındaki söz dizimini kabul eder.
4 Derleyici yalnızca C# 4.0 veya altındaki söz dizimini kabul eder.
3 Derleyici yalnızca C# 3.0 veya altındaki 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.

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.

Önemli

Değer latest genellikle önerilmez. Bu özellik, yapılandırılan hedef çerçeveye dahil olmayan güncelleştirmelere bağlı olsa bile derleyici en son özellikleri etkinleştirir. Bu ayar olmadan, projeniz hedef çerçeveniz için önerilen derleyici sürümünü kullanır. Daha yeni dil özelliklerine erişmek için hedef çerçeveyi güncelleştirebilirsiniz.

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.

Buna ek olarak, C# sürüm güncelleştirmeleri genel olarak ana .NET sürümleriyle aynı olsa da, yeni söz dizimi ve özelliklerin söz dizimi söz dizimi ile ilgili olması gerekmez. Her özelliğin, NuGet paketlerini veya diğer kitaplıkları ekleyerek alt düzey çerçevelerde çalışmasına olanak tanıyabilecek 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ı Description
C# 7.0 ve üzeri Bağlantı C# Dil Belirtimi Sürüm 7 - Resmi Olmayan Taslak: .NET Foundation
C# 6.0 PDF'i indirme Standart ECMA-334 6. Sürüm
C# 5.0 PDF’yi İndir 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’yi İndir Standart ECMA-334 4. Sürüm
C# 1.2 DOC'ı indirin C# Dil Belirtimi Sürüm 1.2: Microsoft Corporation
C# 1.0 DOC'ı indirin C# Dil Belirtimi Sürüm 1.0: Microsoft Corporation

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

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

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

Null Atanabilir

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

<Nullable>enable</Nullable>

Bağımsız değişken , , disablewarningsveya annotationsbağımsız değişkenlerinden biri enableolmalı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şkeni 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ış 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 ayarlanmış enableşekilde sağlanı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 özniteliklere ek açıklama ekleyen 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.