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.
Bu konu, F# Etkileşimli (dotnet fsi) yönergeleri için F# ile Etkileşimli Programlama derleyici yönergelerini açıklar.
Derleyici yönergesi # simgesiyle ön eklenmiştir ve tek başına bir satırda görünür.
Aşağıdaki tabloda F# dilinde kullanılabilen derleyici yönergeleri listeleniyor.
| Directive | Description |
|---|---|
#if
if-ifadesi |
Koşullu derlemeyi destekler.
#if sonrasındaki bölümdeki kod, if ifadesidefined olarak değerlendirildiğinde dahil edilir (aşağıya bakın). |
#else |
Koşullu derlemeyi destekler. Önceki #if ile kullanılan simge defined olarak değerlendirilmezse kodun bir bölümünü içerecek şekilde işaretler. |
#endif |
Koşullu derlemeyi destekler. Kodun koşullu bölümünün sonunu işaretler. |
#[satır] int,#[satır] intdizesi,#[satır] intverbatim-string |
Hata ayıklama için özgün kaynak kod satırını ve dosya adını gösterir. Bu özellik, F# kaynak kodu oluşturan araçlar için sağlanır. |
#nowarn
uyarı kodları |
Uyarı kodları tarafından belirtilen bir veya daha fazla derleyici uyarılarını devre dışı bırakır (aşağıya bakın). |
#warnon
uyarı kodları |
Uyarı kodları tarafından belirtilen bir veya daha fazla derleyici uyarısını etkinleştirir (aşağıya bakın). |
Koşullu Derleme Yönergeleri
Bu yönergelerden biri tarafından devre dışı bırakılan kod, Visual Studio Code Düzenleyicisi'nde soluk görüntülenir.
Aşağıdaki kod , #ifve #else yönergelerinin #endifkullanımını gösterir. Bu örnekte kod, tanımının function1iki sürümünü içerir. -define derleyicisi seçeneği kullanılarak VERSION1 etkinleştirilir. Aksi takdirde ve arasındaki #else#endif kod etkinleştirilir.
#if VERSION1
let function1 x y =
printfn "x: %d y: %d" x y
x + 2 * y
#else
let function1 x y =
printfn "x: %d y: %d" x y
x - 2*y
#endif
let result = function1 10 20
yönergesi #if mantıksal ifadeleri de kabul eder:
#if SILVERLIGHT || COMPILED && (NETCOREFX || !DEBUG)
#endif
Aşağıdaki ifadeler kullanılabilir.
| if-expr | evaluation |
|---|---|
if-expr1 \|\| if-expr2 |
defined veya if-expr1if-expr2 ise defined. |
if-expr1 && if-expr2 |
defined eğer if-expr1 ve if-expr2defined ise. |
!if-expr1 |
defined, if-expr1defined değilse. |
( if-expr1 ) |
if-expr1 tanımlanmışsa tanımlıdır. |
symbol |
defined derleyici seçeneği tarafından -define tanımlandığı şekilde olarak işaretlenirse. |
Mantıksal işleçler normal mantıksal önceliğe sahiptir.
F# içinde derleyici yönergesi yoktur #define . yönergesi tarafından #if kullanılan simgeleri tanımlamak için derleyici seçeneğini veya proje ayarlarını kullanmanız gerekir.
Koşullu derleme yönergeleri iç içe geçmiş olabilir. Derleyici yönergeleri için girinti önemli değildir.
Önceden tanımlanmış simgeler
F# derleyicisi ve derleme sistemi, koşullu derleme için kullanılabilecek çeşitli simgeleri otomatik olarak tanımlar.
Yapılandırma simgeleri oluşturma
Aşağıdaki simgeler derleme yapılandırmanıza göre tanımlanır:
-
DEBUG: Hata ayıklama modunda derlenirken tanımlanır. Proje sisteminde,DEBUGsimge Hata Ayıklama yapılandırmasında otomatik olarak tanımlanır, ancak Yayın yapılandırmasında tanımlanmaz. Bu simge genellikle onaylar ve tanılama kodu ile kullanılır. Daha fazla bilgi için bkz. Onaylar. -
TRACE: İzlemeyi etkinleştiren derlemeler için tanımlanır. gibiDEBUG, bu simge genellikle Hata ayıklama yapılandırmalarında tanımlanır, ancak Yayın yapılandırmalarında da etkinleştirilebilir.
Derleyici seçeneğini veya proje ayarlarını kullanarak -define bu değerleri geçersiz kılabilirsiniz.
Derleme modu simgeleri
Aşağıdaki simgeler farklı derleme modlarını birbirinden ayırır:
-
COMPILED: F# derleyicisi ile kod derlenirken tanımlanır. Bu simge, derlenmiş derlemelerde F# Etkileşimli oturumlarına göre farklı davranması için koda ihtiyacınız olduğunda kullanışlıdır. -
INTERACTIVE: Hem etkileşimli oturumlar hem de betik yürütme dahil olmak üzere F# Etkileşimli ()dotnet fsiiçinde kod derlenirken veya yürütülürken tanımlanır. Bu, etkileşimli çalışırken farklı çalışan kodlar yazmanızı sağlar.
Bu simgeleri betiklerde kullanma hakkında daha fazla bilgi için bkz. F# ile Etkileşimli Programlama.
Örnek:
#if INTERACTIVE
// Code specific to F# Interactive
#r "nuget: Newtonsoft.Json"
#endif
#if COMPILED
// Code specific to compiled assemblies
open System.Configuration
#endif
Hedef çerçeve sembolleri
Derleme sistemi, SDK stilindeki projelerde farklı hedef çerçeveler için ön işlemci sembollerini de tanımlar. Bu simgeler, birden çok .NET sürümünü hedefleyen kitaplıklar veya uygulamalar oluştururken kullanışlıdır.
| Hedef Çerçeveler | Semboller | Ek simgeler (.NET 5+ SDK'larda kullanılabilir) |
Platform simgeleri (yalnızca mevcut olan) işletim sistemine özgü bir TFM belirttiğinizde) |
|---|---|---|---|
| .NET Çerçevesi |
NETFRAMEWORK, NET481, NET48, , NET472, NET471, NET47, , NET462, NET461, NET46, NET452, NET451, NET45NET40NET35,NET20 |
NET48_OR_GREATER, , NET472_OR_GREATER, , NET471_OR_GREATER, NET47_OR_GREATER, NET462_OR_GREATER, , NET461_OR_GREATER, NET46_OR_GREATER, NET452_OR_GREATERNET451_OR_GREATER, NET45_OR_GREATERNET40_OR_GREATER, NET35_OR_GREATERNET20_OR_GREATER |
|
| .NET Standard |
NETSTANDARD, , NETSTANDARD2_1NETSTANDARD2_0, , NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1,NETSTANDARD1_0 |
NETSTANDARD2_1_OR_GREATER, NETSTANDARD2_0_OR_GREATER, NETSTANDARD1_6_OR_GREATER, , NETSTANDARD1_5_OR_GREATER, NETSTANDARD1_4_OR_GREATER, NETSTANDARD1_3_OR_GREATER, NETSTANDARD1_2_OR_GREATER, NETSTANDARD1_1_OR_GREATER, NETSTANDARD1_0_OR_GREATER |
|
| .NET 5+ (ve .NET Core) |
NET, NET10_0, NET9_0, , NET8_0, NET7_0, NET6_0, , NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1NETCOREAPP2_0NETCOREAPP1_1,NETCOREAPP1_0 |
NET10_0_OR_GREATER, , NET9_0_OR_GREATER, , NET8_0_OR_GREATER, NET7_0_OR_GREATER, NET6_0_OR_GREATER, , NET5_0_OR_GREATER, NETCOREAPP3_1_OR_GREATER, NETCOREAPP3_0_OR_GREATERNETCOREAPP2_2_OR_GREATER, NETCOREAPP2_1_OR_GREATERNETCOREAPP2_0_OR_GREATER, NETCOREAPP1_1_OR_GREATERNETCOREAPP1_0_OR_GREATER |
ANDROID, BROWSER, IOS, , MACCATALYST, MACOS, TVOS, WINDOWS,[OS][version] (örneğin IOS15_1),[OS][version]_OR_GREATER (örneğin IOS15_1_OR_GREATER) |
Uyarı
- Sürümsüz simgeler, hedeflediğiniz sürümden bağımsız olarak tanımlanır.
- Sürüme özgü simgeler yalnızca hedeflediğiniz sürüm için tanımlanır.
- Simgeler
<framework>_OR_GREATER, hedeflediğiniz sürüm ve önceki tüm sürümler için tanımlanır. Örneğin, .NET Framework 2.0'ı hedef alıyorsanız, şu simgeler tanımlanır:NET20,NET20_OR_GREATER,NET11_OR_GREATERveNET10_OR_GREATER. - Simgeler
NETSTANDARD<x>_<y>_OR_GREATERyalnızca .NET Standard hedefleri için tanımlanır, .NET Core ve .NET Framework gibi .NET Standard uygulayan hedefler için tanımlanmaz. - Bunlar MSBuild
TargetFrameworközelliği ve NuGet tarafından kullanılan hedef çerçeve adlarından (TFM' ler) farklıdır.
Örneğin, hedef çerçeveye göre koşullu olarak kod derlemek için şu simgeleri kullanabilirsiniz:
#if NET6_0_OR_GREATER
// Use .NET 6+ specific APIs
#else
// Use alternative implementation for older frameworks
#endif
NULLABLE yönergesi
F# 9'dan başlayarak, projede null atanabilir başvuru türlerini etkinleştirebilirsiniz:
<Nullable>enable</Nullable>
Bu, NULLABLE yönergesini otomatik olarak derlemeye ekler. Özelliği ilk olarak dağıtırken, çakışan kodu #if NULLABLE kare direktileri ile koşullu olarak değiştirmek yararlı olur.
#if NULLABLE
let length (arg: 'T when 'T: not null) =
Seq.length arg
#else
let length arg =
match arg with
| null -> -1
| s -> Seq.length s
#endif
Satır Yönergeleri
Derleme sırasında derleyici, her hatanın oluştuğu satır numaralarına başvurarak F# kodundaki hataları bildirir. Bu satır numaraları, bir dosyadaki ilk satır için 1'de başlar. Ancak, başka bir araçtan F# kaynak kodu oluşturuyorsanız, oluşturulan F# kodundaki hatalar büyük olasılıkla başka bir kaynaktan kaynaklandığından, oluşturulan koddaki satır numaraları genellikle ilgi çekici değildir. yönergesi #line , F# kaynak kodu oluşturan araç yazarlarının özgün satır numaraları ve kaynak dosyaları hakkındaki bilgileri oluşturulan F# koduna geçirmesi için bir yol sağlar.
yönergesini kullandığınızda, dosya adlarının #line tırnak içine alınması gerekir. Dizenin önünde tamsayı belirteci (@) görüntülenmediği sürece, bunları yolda kullanmak için bir yerine iki ters eğik çizgi karakteri kullanarak ters eğik çizgi karakterlerinden kurtulmanız gerekir. Aşağıdakiler geçerli satır belirteçleridir. Bu örneklerde, özgün dosyanın Script1 bir araç üzerinden çalıştırıldığında otomatik olarak oluşturulan bir F# kod dosyasıyla sonuçlandığını ve bu yönergelerin konumundaki kodun dosyasındaki Script125. satırdaki bazı belirteçlerden oluşturulduğunu varsayalım.
# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"
Bu belirteçler, bu konumda oluşturulan F# kodunun içindeki veya satırındaki 25Script1bazı yapılardan türetildiğini gösterir.
Yönergelerin #line davranışını #nowarn / #warnonetkilemediğini unutmayın. Bu iki yönerge her zaman derlenen dosyayı ilişkilendirmektedir.
Uyarı Yönergeleri
Uyarı yönergeleri, kaynak dosyanın bölümleri için belirtilen derleyici uyarılarını devre dışı bırakır veya etkinleştirir.
Warn yönergesi, aşağıdakilerden oluşan tek bir kaynak kodu satırıdır:
- İsteğe bağlı baştaki boşluk alanı
- Dize
#nowarnveya#warnon - Whitespace
- Boşlukla ayrılmış bir veya daha fazla uyarı kodu (aşağıya bakın)
- İsteğe bağlı boşluk
- İsteğe bağlı satır açıklaması
Uyarı kodu, isteğe bağlı olarak önünde FS olan ve isteğe bağlı olarak çift tırnak içine alınmış olabilen bir basamak dizisidir (uyarı numarasını temsil eder).
Yönerge #nowarn , aynı uyarı numarası için bir #warnon yönerge bulunana kadar veya dosyanın sonuna kadar uyarıyı devre dışı bırakır. Benzer şekilde bir yönerge, #nowarn aynı uyarı numarası için bir #warnon yönerge bulunana kadar veya dosyanın sonuna kadar uyarıyı devre dışı bırakır. Bu tür çiftlerden önce ve sonra derleme varsayılanı uygulanır.
- --nowarn derleyici seçeneği (veya ilgili msbuild özelliği) tarafından devre dışı bırakılırsa uyarı yok
- --warnon derleyici seçeneği (veya ilgili msbuild özelliği) etkinleştirilmedikçe, isteğe bağlı uyarılar için herhangi bir uyarı yoktur.
Burada bir (eşleştirilmiş) örnek verilmiştir.
module A
match None with None -> () // warning
let x =
#nowarn 25
match None with None -> 1 // no warning
#warnon FS25
match None with None -> () // warning
#nowarn "FS25" FS007 "42"
match None with None -> () // no warning
Ayrıca bakınız
- F# Dili Başvurusu
- Derleyici Seçenekleri