Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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: Koda /
-unsafeizin verunsafe. -
DefineConstants /
-define: Koşullu derleme simgelerini tanımlayın. -
LangVersion /
-langversion: (en son ana sürüm) veyadefault(ikincil sürümler de dahil olmak üzere en son sürüm) gibilatestdil 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 bkz . Derleyici seçenekleri.
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.
CheckForOverflowUnderflow olduğundafalse, varsayılan bağlam işaretlenmemiş bir bağlamdır. Bu seçenek için varsayılan değer olan değeri, falsetaşma denetiminin devre dışı bırakıldığı anlamına gelir.
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şlemleri etkiler 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.
Güncelleştirilmiş bellek güvenliği kurallarını etkinleştirme
Güncelleştirilmiş bellek güvenliği kuralları, C# 15 ve .NET 11'deki bir önizleme özelliğidir. İki bağımsız derleyici ayarı kullanır:
- Dil
previewsürümü, yeni söz dizimi ve işaretçi gevşemelerini etkinleştirir. - Derleyici
updated-memory-safety-rulesözelliği, güvenli olmayan çağıran yükümlülükleri de dahil olmak üzere güncelleştirilmiş kuralları etkinleştirir ve derleyicinin derlemedeki seçimi özniteliğiyle kaydetmesine MemorySafetyRulesAttribute neden olur.
Gelecekte kararlı bir SDK özelliği olan , MemorySafetyRulesözelliğin önizlemeden çıktığı (örneğin, <MemorySafetyRules>2</MemorySafetyRules>) için üçüncü bir etkinleştirme katmanı olarak planlanır, ancak bu özellik henüz uygulanmaz.
Proje için her iki ayarı da kullanın:
<PropertyGroup>
<LangVersion>preview</LangVersion>
<Features>$(Features);updated-memory-safety-rules</Features>
</PropertyGroup>
Dosya tabanlı bir program için eşdeğer yönergeleri ekleyin:
#:property Features=$(Features);updated-memory-safety-rules
#:property LangVersion=preview
AllowUnsafeBlocks özelliği bağımsızdır. Kaynağın anahtar sözcüğü kullanıp kullanamayacağını unsafe denetler. Bir proje, güvenli olmayan koda izin vermeden güncelleştirilmiş kuralları etkinleştirebilir ve bu durumda güvenli olmayan API'ler gerektirdiğinde hatalar alır.
Bir derlemenin güncelleştirilmiş kuralları başka bir derlemeye karşı zorlayıp zorlamadığı, hangi tarafın kabul ettiğine bağlıdır:
-
Güncelleştirilmiş model çağıranı, güncelleştirilmiş model çağıranı: Çağıranın
unsafeişaretçileri meta veriler arasında hareket eder. Çağıran, her çağrıyı bir bloktaki bir requires-unsafe üyesineunsafesarmalar. -
Güncelleştirilmiş model çağıranı, özgün model çağıran: Uyumluluk modu, çağıran üyeyi imzasında bir işaretçi türüyle gerekli-güvenli değil olarak değerlendirir, bu nedenle çağrı sitesinin kapsayan
unsafebir bloka ihtiyacı vardır. Bu mod, işaretçi tabanlı bir API'nin gereksinimini sessizce kaybetmesiniunsafeengeller. - Özgün model çağıranı, güncelleştirilmiş model çağıranı: Özgün işaretçi kuralları hala geçerlidir. İmzasında işaretçi türü olmayan güvenli olmayan bir üye, özgün model çağıranı yeni işaretçileri okuyamadığından güvenli koddan çağrılabilir hale gelir.
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, bir simgenin C++ gibi dillerde olduğu gibi bir değere sahip olmasına izin vermez. Örneğin, #define makro oluşturamaz veya sabit tanımlayamazsınız. Sabit tanımlamanız gerekiyorsa bir enum değişken kullanın. C++stili 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ı
öğesini olarak LangVersionayarlamayınlatest. ayarı, latest yüklenen derleyicinin en son sürümünü kullandığı anlamına gelir. Bu sürüm makineden makineye değişerek derlemeleri güvenilir hale getiremez. Ayrıca, geçerli SDK'ya dahil olmayan ç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>
Bazı önizleme özelliklerine <LangVersion>preview</LangVersion>ek olarak ayrı bir kabul gerektirir. Örneğin, C# 15 güncelleştirilmiş bellek güvenliği kuralları derleyici özelliğini kullanır updated-memory-safety-rules . Daha fazla bilgi için bkz . Güncelleştirilmiş bellek güvenliği kurallarını etkinleştirme.
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. |
latestMajorveya default |
Derleyici, derleyicinin en son yayımlanan ana sürümünden 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-2veya 2 |
Derleyici yalnızca ISO/IEC 23270:2006 C# (2.0) içinde yer alan söz dizimini kabul eder. |
ISO-1veya 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ştirin.
Değerle LangVersion, LangVersion
defaultfarklıdır. Belirtme,defaulthedef ç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ırsadefaultC# 11 kullanılır.LangVersion derleyici seçeneği, C# uygulamanız tarafından başvuruda bulunan meta verileri etkilemez.
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 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ı | 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 bağlamı belirtmek için Null atanabilir seçeneğini kullanın. Etiketini kullanarak projenin yapılandırmasında <Nullable> ayarlayın:
<Nullable>enable</Nullable>
Bağımsız değişken , , enabledisableveya warnings' lerden annotationsbiri olmalıdır. Bağımsız enable değişken null atanabilir bağlamı açar.
disable bağımsız değişkeni null atanabilir bağlamı kapatır. Bağımsız warnings değişken null atanabilir uyarı bağlamını açar. Bağımsız annotations değişken, null atanabilir ek açıklama bağlamını açar. Bu değerler hakkında daha fazla bilgi için bkz. Null atanabilir bağlamlar. Mevcut bir kod tabanında null atanabilir başvuru türlerini etkinleştirme hakkında daha fazla bilgi edinmek için bkz. null atanabilir geçiş stratejileri.
Not
Bir değer ayarlamazsanız, varsayılan değer olur disable. Ancak, .NET 6 ve daha yeni şablonlar Null atanabilir değerini enable varsayılan olarak ayarlar.
Akış analizi yürütülebilir kod içindeki değişkenlerin null atanabilirliğini çıkarsar. Bir değişkenin çıkarsanan null atanabilirliği, değişkenin bildirilen null atanabilirlik özelliğinden bağımsızdır. Derleyici, çağrı derlenen çıktıdan koşullu olarak atlandığında bile yöntem çağrılarını analiz eder. Örneğin, çağrı Debug.Assert koşullu olsa ve yayın derlemelerinde derlenmemiş olsa bile derleyici yine de null atanabilirlik için çağrısı analiz eder.
Aşağıdaki özniteliklerle ek açıklama ekli yöntemlerin çağrılması akış analizini de etkiler:
- Basit önkoşullar: AllowNullAttribute ve DisallowNullAttribute
- Basit son koşul: MaybeNullAttribute ve NotNullAttribute
- Koşullu son koşul: MaybeNullWhenAttribute ve NotNullWhenAttribute
-
DoesNotReturnIfAttribute (örneğin,
DoesNotReturnIf(false)için Debug.Assert) ve DoesNotReturnAttribute - NotNullIfNotNullAttribute
- Üye son önkoşulları: MemberNotNullAttribute(String) ve MemberNotNullAttribute(String[])
Önemli
Genel null atanabilir bağlam, oluşturulan kod dosyalarına uygulanmaz. 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 dosya, aşağıdaki yollardan biriyle oluşturuldu olarak işaretlenir:
- .editorconfig içinde, bu dosyaya uygulanan bir bölümde belirtin
generated_code = true. - Dosyanın en üstündeki açıklamayı ekleyin
<auto-generated>veya<auto-generated/>ekleyin. Açıklamadaki herhangi bir satıra yerleştirebilirsiniz, 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.