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: / -checked Taşma denetimleri oluşturma.
  • AllowUnsafeBlocks: / -unsafe 'güvenli olmayan' koda izin ver.
  • DefineConstants: / -define Koşullu derleme sembollerini tanımlayın.
  • LangVersion:(en son ana sürüm) veya (ikincil sürümler de dahil / -langversion olmak üzere en son default latest sürüm) gibi bir dil sürümü belirtin.
  • Null değere / -nullable değ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:

Ö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:

  1. . Editorconfig dosyasında, generated_code = true Bu dosya için geçerli olan bir bölümde belirtin.
  2. <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.
  3. Dosya adını TemporaryGeneratedFile_ başlatın
  4. 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 .