Dil özelliği kuralları için C# Derleyici Seçenekleri
Aşağıdaki seçenekler, derleyicinin dil özelliklerini nasıl yorumlay olduğunu kontrol altına almaktadır. Yeni MSBuild söz dizimi Kalın olarak gösterilir. Daha eski csc.exe söz dizimi içinde code style gösterilir.
- CheckForOverflowUnderflow: /
-checkedTaşma denetimleri oluşturma. - AllowUnsafeBlocks: /
-unsafe'güvenli olmayan' koda izin ver. - DefineConstants: /
-defineKoşullu derleme sembollerini tanımlayın. - LangVersion:(en son ana sürüm) veya (ikincil sürümler de dahil /
-langversionolmak üzere en sondefaultlatestsürüm) gibi bir dil sürümü belirtin. - Null değere /
-nullabledeğiştirilebilir: Boş değere değiştirilebilir bağlamı veya null değere değiştirilebilir uyarıları etkinleştirin.
CheckForOverflowUnderflow
CheckForOverflowUnderflow seçeneği, veri türünün aralığının dışında bir değerle sonuçlanacak tamsayı aritmetik deyiminin çalışma zamanı özel durumuna neden olup olmadığını belirtir.
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
Bir veya anahtar sözcüğü kapsamındaki tamsayı aritmetik deyimi checked unchecked CheckForOverflowUnderflow seçeneğinin etkisine tabi değildir. bir veya anahtar sözcüğü kapsamında olmayan bir tamsayı aritmetik deyimi, veri türü aralığının dışında bir değerle sonuçlanacaksa ve checked unchecked CheckForOverflowUnderflow ise, bu deyim çalışma zamanında bir özel duruma neden true olur. CheckForOverflowUnderflow false ise, bu deyim çalışma zamanında özel durumlara neden değildir. Bu seçenek için varsayılan false değerdir; taşma denetimi devre dışıdır.
AllowUnsafeBlocks
AllowUnsafeBlocks derleyici seçeneği, derlemek için güvenli olmayan anahtar sözcüğünü kullanan koda izin verir. Bu seçeneğin varsayılan değeridir, false yani güvenli olmayan koda izin verilmez.
<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, programladığınız tüm kaynak kod dosyalarındaki sembolleri tanımlar.
<DefineConstants>name;name2</DefineConstants>
Bu seçenek, tanımlamak istediğiniz bir veya daha fazla simgenin adlarını belirtir. DefineConstants seçeneği, #define önişlemci yönergesi ile aynı etkiye sahiptir ancak derleyici seçeneğinin proje üzerindeki tüm dosyalar için etkili olması gerekir. Kaynak dosyadaki bir #undef yönergesi tanımı kaldırana kadar kaynak dosyada bir simge tanımlanmış kalır. seçeneğini -define kullanırsanız, bir #undef dosyada yer alan yönergenin proje üzerindeki diğer kaynak kod dosyaları üzerinde hiçbir etkisi olmaz. Kaynak dosyalarını koşullu olarak derlemek için #if, #else, #elif ve #endifile bu seçenek tarafından oluşturulan sembolleri kullanabilirsiniz. C# derleyicisi, kaynak kodunda kullanabileceğiniz herhangi bir simge veya makro tanımsıyor; tüm sembol tanımları kullanıcı tanımlı olmalı.
Not
C# #define yönergesi, C++ gibi dillerde olduğu gibi bir sembole değer verilmesine izin vermez. Örneğin, #define makro oluşturmak veya sabit tanımlamak için kullanılamaz. Sabit tanımlamanız gerekirse bir değişken enum kullanın. C++ stilinde bir makro oluşturmak için genel türler gibi alternatifleri göz önünde bulundurarak. Makrolar normalde hataya neden olduğundan C# bunların kullanımına izin verir ancak daha güvenli alternatifler sunar.
LangVersion
Derleyicinin yalnızca seçilen C# dili belirtimlerine dahil edilen söz dizimlerini kabul etmesine 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özdizimini kabul eder. |
latest |
Derleyici derleyicinin en son yayınlanan sürümünden (ikincil sürüm dahil) söz dizimini kabul eder. |
latestMajor (default) |
Derleyici derleyicinin en son yayınlanan ana sürümünden söz dizimini kabul eder. |
10.0 |
Derleyici yalnızca C# 10 veya daha düşük bir sözdiziminde bulunan sözdizimini kabul eder. |
9.0 |
Derleyici yalnızca C# 9,0 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
8.0 |
Derleyici yalnızca C# 8,0 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
7.3 |
Derleyici yalnızca C# 7,3 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
7.2 |
Derleyici yalnızca C# 7,2 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
7.1 |
Derleyici yalnızca C# 7,1 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
7 |
Derleyici yalnızca C# 7,0 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
6 |
Derleyici yalnızca C# 6,0 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
5 |
Derleyici yalnızca C# 5,0 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
4 |
Derleyici yalnızca C# 4,0 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
3 |
Derleyici yalnızca C# 3,0 veya daha düşük bir düzeyde bulunan sözdizimini kabul eder. |
ISO-2 (veya 2) |
Derleyici yalnızca ISO/ıEC 23270:2006 C# (2,0) içinde bulunan söz dizimini kabul eder. |
ISO-1 (veya 1) |
Derleyici yalnızca ISO/ıEC 23270:2003 C# (1.0/1.2) içinde yer alan sözdizimini kabul eder. |
Varsayılan dil sürümü, uygulamanıza yönelik hedef çerçeveye ve SDK'nın veya Visual Studio bağlıdır. Bu kurallar C# dili sürümüyle tanımlanır.
C# uygulamanız tarafından başvurulan meta veriler LangVersion derleyici seçeneğine tabi değildir.
C# derleyicisi her sürümü dil belirtiminin uzantılarını içerdiği için LangVersion, derleyicinin önceki bir sürümünün eşdeğer işlevselliğini size vermemektedir.
Buna ek olarak, C# sürüm güncelleştirmeleri genellikle ana .NET Framework sürümlerle çakışsa da, yeni söz dizimi ve özellikler bu çerçeve sürümüne bağlı olmayabilir. Yeni özellikler kesinlikle C# düzeltmesi ile birlikte yayımlanan yeni bir derleyici güncelleştirmesi gerektirir, ancak her belirli özelliğin, NuGet paketleri veya diğer kitaplıkları dahil etmek üzere 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ı kullanırsanız kullanın, çalışma zamanlarınızı oluşturmak için ortak dil çalışma zamanının geçerli .exe veya .dll. Bir özel durum, -langversion:ISO-1 altında çalışan arkadaş derlemeleri ve ModuleAssemblyName'tir.
C# dil sürümünü belirtmenin diğer yolları için bkz. C# dili sürümü.
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 sonrası | Şu anda kullanılamıyor | |
| C# 6.0 | Bağlantı | C# Dil Belirtimi Sürüm 6 - Resmi Olmayan Taslak: .NET Foundation |
| 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, SDK'nın ilgili dil sürümünü destekleyen C# derleyicisi ile en düşük sürümleri listeledik:
| C# sürümü | En düşük SDK sürümü |
|---|---|
| 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/build araçları .net 2002 veya paketlenmiş .NET Framework 1,0 derleyicisi |
Null Atanabilir
Null yapılabilir seçeneği, null yapılabilir bağlamı belirtmenize olanak tanır. Bu seçenek için varsayılan değer disable .
<Nullable>enable</Nullable>
Bağımsız değişken,, veya ' den biri olmalıdır enable disable warnings annotations . enableBağımsız değişkeni null yapılabilir bağlamı mümkün. Belirtildiğinde disable null yapılabilir bağlam devre dışı bırakılır. warningsBağımsız değişkeni sağlanırken null yapılabilir uyarı bağlamı etkindir. annotationsBağımsız değişkenini belirtirken, null yapılabilir ek açıklama bağlamı etkindir.
Flow analiz, çalıştırılabilir koddaki değişkenlerin null değer düzeyini çıkarsmak için kullanılır. Bir değişkenin Çıkarsanan null olabilme, değişkenin belirtilen null değer alabilme durumu değerinden bağımsızdır. Yöntem çağrıları, koşullu olarak atlanırsa bile çözümlenir. Örneğin, Debug.Assert yayın modunda.
Aşağıdaki özniteliklerle açıklama eklenmiş 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 koşul sonrası: 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
Global null yapılabilir bağlam, oluşturulan kod dosyaları için uygulanmaz. Bu ayardan bağımsız olarak, null yapılabilir bağlam, oluşturuldu olarak işaretlenen tüm kaynak dosyaları için devre dışıdır . Bir dosyanın oluşturulduğu şekilde işaretlenmiş dört yolu vardır:
- . Editorconfig dosyasında,
generated_code = trueBu dosya için geçerli olan bir bölümde belirtin. <auto-generated><auto-generated/>Dosyanın üst kısmına bir açıklama koyun. Bu, açıklama içindeki herhangi bir satırda olabilir, ancak açıklama bloğu dosyadaki ilk öğe olmalıdır.- Dosya adını TemporaryGeneratedFile_ başlatın
- Dosya adını . Designer. cs, . generated. cs, . g. cs veya . g. ı. cs ile sonlandırın.
Oluşturucular, Önişlemci yönergesini kullanarak kabul edebilir #nullable .