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 style
gö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) veyalatest
(ikincil sürümler de dahil olmak üzere en son sürüm) gibidefault
dil sürümünü belirtin. - Null atanabilir /
-nullable
: Boş değer atanabilir bağlamı veya null atanabilir uyarıları etkinleştirin.
Not
Projeniz için bu seçenekleri yapılandırma hakkında daha fazla bilgi için Derleyici seçenekleri'ne bakın.
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, false
yani 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ırsadefault
C# 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 , , disable
warnings
veya annotations
' lerden enable
biri 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 enable
ayarlanı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:
- Basit ön koşullar: AllowNullAttribute ve DisallowNullAttribute
- Basit son koşullar: MaybeNullAttribute ve NotNullAttribute
- Koşullu son koşullar: MaybeNullWhenAttribute ve NotNullWhenAttribute
- DoesNotReturnIfAttribute (örneğin,
DoesNotReturnIf(false)
için Debug.Assert) ve DoesNotReturnAttribute - NotNullIfNotNullAttribute
- Üye son koşulları: MemberNotNullAttribute(String) ve MemberNotNullAttribute(String[])
Ö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:
- .editorconfig içinde, bu dosyaya uygulanan bir bölümde belirtin
generated_code = true
. - 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. - Dosya adını TemporaryGeneratedFile_ ile başlatma
- 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.