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 simgelerini 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 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, 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ğ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 , false
gü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 , , disable
warnings
veya annotations
bağımsız değişkenlerinden biri enable
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ş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:
- 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.