Önişlemci hataları ve uyarıları

Derleyici, ön işlemci yönergelerinin yanlış kullanımı için aşağıdaki hataları oluşturur:

  • CS1024: Önişlemci yönergesi bekleniyor
  • CS1025: Tek satırlı açıklama veya satır sonu bekleniyor
  • CS1027: #endif yönergesi bekleniyor
  • CS1028: Beklenmeyen ön işlemci yönergesi
  • CS1029: #error: 'text'
  • CS1030: #warning: 'text'
  • CS1032: Dosyadaki ilk belirteçten sonra ön işlemci sembolleri tanımlanamaz/tanımları kaldırılamaz
  • CS1038: #endregion yönergesi bekleniyor
  • CS1040: Önişlemci yönergeleri bir satırdaki ilk boşluk olmayan karakter olarak görünmelidir
  • CS1517: Geçersiz ön işlemci ifadesi
  • CS1560: Ön işlemci yönergesi için geçersiz dosya adı belirtildi. Dosya adı çok uzun veya geçerli bir dosya adı değil
  • CS1576: #line yönergesi için belirtilen satır numarası eksik veya geçersiz
  • CS1578: Dosya adı, tek satırlı açıklama veya satır sonu bekleniyor
  • CS1633: Tanınmayan #pragma yönergesi
  • CS1634: Beklenen devre dışı bırakma veya geri yükleme
  • CS1635: Uyarı 'uyarı kodu' genel olarak devre dışı bırakıldığından geri yüklenemiyor
  • CS1691: 'sayı' geçerli bir uyarı numarası değil
  • CS1692: Geçersiz sayı
  • CS1694: Ön işlemci yönergesi için geçersiz dosya adı belirtildi. Dosya adı çok uzun veya geçerli bir dosya adı değil
  • CS1695: Geçersiz #pragma sağlama toplamı söz dizimi; #pragma sağlama toplamı "dosyaadı" "{XXXXXXXXX-XXXX-XXXX-XXXXXXXXXXX}" "XXXX..." olmalıdır
  • CS1696: Tek satırlı açıklama veya satır sonu bekleniyor
  • CS1709: Ön işlemci yönergesi için belirtilen dosya adı boş
  • CS7009: Dosyadaki ilk belirteç sonrasında #r kullanılamaz
  • CS7010: Alıntılanan dosya adı bekleniyor
  • CS7011: #r yalnızca betiklerde izin verilir
  • CS8097: #load yalnızca betiklerde izin verilir
  • CS8098: Dosyadaki ilk belirteç sonrasında #load kullanılamaz
  • CS8301: Ön işleme simgesi için geçersiz ad; 'sembol adı' geçerli bir tanımlayıcı değil
  • CS8938: #line yönerge değeri eksik veya aralık dışında
  • CS8939: #line yönergesi bitiş konumu başlangıç konumundan büyük veya buna eşit olmalıdır
  • CS8996: Ön işlemci yönergelerinde ham string literallere izin verilmez
  • CS9028: #line span yönergesi, ilk parantezden önce, karakter uzaklığından önce ve dosya adından önce alan gerektirir
  • CS9297: #: yönerge dosyadaki ilk belirteç sonrası konumlandırılamaz
  • CS9298: #: yönergeleri yalnızca dosya tabanlı uygulamalarda kullanılabilir (-features:FileBasedProgram)
  • CS9299: #: yönergesinden sonra #if yönergeleri olamaz
  • CS9314: #! yönergeleri yalnızca betiklerde veya dosya tabanlı uygulamalarda kullanılabilir
  • CS9378: '#!' dosyanın ilk satırındaki ilk karakterler olmalıdır

Geçersiz önişlemci yönerge söz dizimi

  • CS1024: Önişlemci yönergesi bekleniyor
  • CS1025: Tek satırlı açıklama veya satır sonu bekleniyor
  • CS1027: #endif yönergesi bekleniyor
  • CS1028: Beklenmeyen ön işlemci yönergesi
  • CS1032: Dosyadaki ilk belirteçten sonra önişlemci sembolleri tanımlanamaz ya da tanımları kaldırılamaz
  • CS1038: #endregion yönergesi bekleniyor
  • CS1040: Önişlemci yönergeleri bir satırdaki ilk boşluk olmayan karakter olarak görünmelidir
  • CS1517: Geçersiz ön işlemci ifadesi
  • CS1633: Tanınmayan #pragma yönergesi
  • CS1696: Tek satırlı açıklama veya satır sonu bekleniyor
  • CS8996: Ön işlemci yönergelerinde ham string literallere izin verilmez

Bu hatalar ön işlemci yönergeleri için geçersiz söz dizimi kullandığınızı gösterir. Yaygın nedenler şunlardır:

  • Sonrasında tanınmayan bir yönerge # kullanma (CS1024, CS1633).
  • Yönerge satırlarına çok satırlı açıklamalar ekleme (CS1025, CS1696).
  • Beklenmeyen konumlarda yönergeleri kullanma (CS1028).
  • Gerekli eşleştirme yönergeleri eksik (CS1027, CS1038).
  • Dosyadaki ilk belirtecin arkasına bir #define veya #undef yönergesi yerleştirme (CS1032).
  • Direktifin bir satırın ilk belirteci olarak yerleştirilmemesi (CS1040).
  • Koşullu derlemede geçersiz ifadeler kullanma (CS1517).
  • Ön işlemci yönergelerinde ham dize değişmez değerlerini kullanma (CS8996).

CS1024 örneği - Önişlemci yönergesi bekleniyor:

#import System   // CS1024 - "import" is not a valid directive

CS1025 örneği - Tek satırlı açıklama veya satır sonu bekleniyor:

#if true /* hello  
*/   // CS1025 - multiline comment not allowed
#endif

CS1027 örneği - #endif yönergesi bekleniyor:

#if true   // CS1027 - missing #endif
class Test { }

CS1028 örneği - Beklenmeyen ön işlemci yönergesi:

#endif   // CS1028 - no matching #if

CS1032 örneği - #define ve #undef önişlemci yönergeleri diğer belirteçlerden önce görünmelidir:

class Test { }
#define X   // CS1032 - directive appears after the first token

Bu hatayı düzeltmek için, dosyadaki ilk belirtecin önüne tüm #define ve #undef yönergelerini yerleştirin:

#define X
#undef Y
class Test { }

CS1038 örneği - #endregion yönergesi bekleniyor:

#region testing
class Test { }
// CS1038 - missing #endregion

CS1040 örneği - Önişlemci yönergeleri ilk boşluk olmayan karakter olarak görünmelidir:

/* Comment */ #define X   // CS1040 - directive not first on line

CS1517 örneği - Geçersiz ön işlemci ifadesi:

#if 1           // CS1517 - numeric literals not allowed
#endif
#if ~symbol     // CS1517 - bitwise operators not allowed  
#endif

CS1633 örneği - Tanınmayan #pragma yönergesi:

#pragma unknown  // CS1633 - "unknown" is not a valid pragma

CS8996 örneği - Ön işlemci yönergelerinde ham metin sabitlerine izin verilmez:

// CS8996.cs
#pragma checksum """raw_string""" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // CS8996
class Test { }

Bu hatayı düzeltmek için normal bir dize sabiti kullanın.

#pragma checksum "filename.cs" "{406EA660-64CF-4C82-B6F0-42D48172A799}" "hash"  // OK
class Test { }

Bu hataları düzeltmek için ön işlemci yönergelerinizin ön işlemci yönergeleri belgelerinde açıklanan doğru söz dizimi kurallarına uydığından emin olun.

Geçersiz önişlemci simge adları

  • CS8301: Ön işleme simgesi için geçersiz ad; 'sembol adı' geçerli bir tanımlayıcı değil

CSharpParseOptions öğesini kod aracılığıyla oluşturduğunuzda, her koşullu derleme simgesini tanımlayıcı biçiminde bir ad olarak sağlayın. İlk karakter bir C# tanımlayıcısının başında geçerli olmalı ve kalan karakterler geçerli tanımlayıcı karakterleri olmalıdır. Roslyn ayrıca anahtar sözcük metnini simge adı olarak kabul eder, ancak @ önekini eklemeyin. Boşluk, - veya . gibi noktalama işaretleri, FEATURE=1 gibi bir atama ya da tam bir koşullu ifade eklemeyin.

Ön işleme simgesi yalnızca adının tanımlanıp tanımlanmadığını kaydeder. Değer depolamaz. Bunun yerine DefineConstants proje özelliği veya -define derleyici seçeneği tarafından sağlanan geçersiz adlar CS2029 üretir; bkz. DefineConstants.

#error ve #warning yönerge hataları

  • CS1029: #error: 'text'
  • CS1030: #warning: 'text'
  • CS1634: Beklenen devre dışı bırakma veya geri yükleme
  • CS1635: Uyarı 'uyarı kodu' genel olarak devre dışı bırakıldığından geri yüklenemiyor
  • CS1691: 'sayı' geçerli bir uyarı numarası değil
  • CS1692: Geçersiz sayı

Bu hatalar, derleyici , #errorve #warning yönergelerini işlediğinde #pragma warningoluşur. Bu yönergeler, derleme ve denetim uyarı davranışı sırasında özel hata ve uyarı iletileri oluşturmanıza olanak sağlar.

CS1029 , yönergesiyle #error tanımlanan hata metnini görüntüler:

// CS1029.cs
class Sample
{
   static void Main()
   {
      #error Let's give an error here   // CS1029
   }
}

Derleme aşağıdaki çıkışı oluşturur:

example.cs(9,8): error CS1029: #error: 'Let's give an error here   // CS1029  '

CS1030 , yönergesi ile #warning tanımlanan uyarı metnini görüntüler:

// CS1030.cs
class Sample
{
   static void Main()
   {
      #warning Let's give a warning here
   }
}

Derleme aşağıdaki çıkışı oluşturur:

example.cs(6,16): warning CS1030: #warning: 'Let's give a warning here'

CS1634, eğer devre dışı bırakma veya geri yükleme atlanmış gibi bir #pragma warning ifade kötü biçimlendirilmişse oluşur.

// CS1634.cs
// compile with: /W:1

#pragma warning   // CS1634
// Try this instead:
// #pragma warning disable 0219

class MyClass
{
  public static void Main()
  {
  }
}

CS1635 , bir uyarıyı /nowarn genel olarak devre dışı bırakmak için komut satırı seçeneğini veya proje ayarını kullandığınızda, ancak #pragma warning restore bu uyarıyı geri yüklemeyi denediğinizde oluşur:

// CS1635.cs
// compile with: /w:1 /nowarn:162

enum MyEnum {one=1,two=2,three=3};

class MyClass
{
    public static void Main()
    {
#pragma warning disable 162

    if (MyEnum.three == MyEnum.two)
        System.Console.WriteLine("Duplicate");

#pragma warning restore 162  // CS1635
    }
}

CS1691, #pragma warning yönergesine geçirilen sayının geçerli bir uyarı numarası olmaması durumunda oluşur.

// CS1691.cs
public class C
{
    int i = 1;
    public static void Main()
    {
        C myC = new C();
#pragma warning disable 151  // CS1691
// Try the following line instead:
// #pragma warning disable 1645
        myC.i++;
#pragma warning restore 151  // CS1691
// Try the following line instead:
// #pragma warning restore 1645
    }
}

CS1692 , gibi #pragma#line önişlemci yönergelerindeki bir sayı çok büyük, yanlış biçimde veya geçersiz karakterler içerdiğinden geçersiz olduğunda oluşur:

// CS1692.cs

#pragma warning disable a  // CS1692
// Try this instead:
// #pragma warning disable 1691

class A
{
    static void Main()
    {
    }
}

Bu yönergeler, geliştiricileri koddaki belirli koşullar hakkında uyarmak veya derleme sırasında hangi uyarıların görüntüleneceğini denetlemek istediğiniz koşullu derleme senaryoları için kullanışlıdır. Bu yönergeleri kullanma hakkında daha fazla bilgi için ön işlemci yönergeleri belgelerine ve #pragma uyarısına bakın.

#line ve dosya yönergesi hataları

  • CS1560: Önişlemci yönergesi için geçersiz dosya adı belirtildi. Dosya adı çok uzun veya geçerli bir dosya adı değil.
  • CS1576: #line yönergesi için belirtilen satır numarası eksik veya geçersiz.
  • CS1578: Dosya adı, tek satırlı açıklama veya satır sonu bekleniyor.
  • CS1694: Ön işlemci yönergesi için geçersiz dosya adı belirtildi. Dosya adı çok uzun veya geçerli bir dosya adı değil.
  • CS1695: Geçersiz #pragma checksum söz dizimi; #pragma checksum "dosya adı" "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" "XXXX..." biçiminde olmalıdır.
  • CS1709: Ön işlemci yönergesi için belirtilen dosya adı boş.
  • CS8938: #line yönerge değeri eksik veya aralık dışında.
  • CS8939: #line yönergesi bitiş konumu başlangıç konumundan büyük veya buna eşit olmalıdır.
  • CS9028: #line span yönergesi, ilk parantezden önce, karakter uzaklığından önce ve dosya adından önce boşluk gerektirir.

Bu hatalar, yönergenin veya dosyayla ilgili önişlemci yönergelerinin #line yanlış kullanımını gösterir. Yaygın nedenler şunlardır:

  • Geçersiz veya eksik dosya adları (CS1560, CS1694, CS1709).
  • Yanlış satır numarası biçimi veya değerleri (CS1576, CS8938, CS8939).
  • Dosya adları ve açıklamalar için doğru söz dizimi eksik (CS1578).
  • Yanlış biçimlendirilmiş #pragma checksum söz dizimi (CS1695).
  • Span yönergelerinde #line yanlış aralık (CS9028).

CS1560/CS1694 örneği - Geçersiz dosya adı belirtildi:

#line 100 "MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890MyFile1234567890.txt"   // CS1560/CS1694 - filename too long

CS1576 örneği - Satır numarası eksik veya geçersiz:

#line "abc.sc"         // CS1576 - missing line number
#line abc "file.cs"    // CS1576 - invalid line number format

CS1578 örneği - Dosya adı, açıklama veya satır sonu bekleniyor:

#line 101 abc.cs   // CS1578 - filename not quoted

CS1695 örneği - Geçersiz #pragma kontrol toplamı söz dizimi:

#pragma checksum "12345"  // CS1695 - missing GUID and checksum

CS1709 örneği - Boş dosya adı:

#pragma checksum "" "{406EA660-64CF-4C82-B6F0-42D48172A799}" ""  // CS1709 - empty filename

CS8938 örneği - #line yönergesi değeri eksik veya aralık dışında:

#line   // CS8938 - missing value
#line 0  // CS8938 - out of range (must be 1-16,707,566)

CS8939 örneği - #line bitiş konumu hatası:

#line (1, 10) - (1, 5) "file.cs"  // CS8939 - end column < start column

CS9028 örneği - #line span yönerge aralığı:

#line(1, 1) - (1, 10)"file.cs"  // CS9028 - missing spaces

Bu hataları düzeltmek için, yönergelerinizin ve dosyayla ilgili önişlemci yönergelerinizin #lineönişlemci yönergeleri belgelerinde açıklandığı gibi doğru söz dizimini izlediğinden emin olun.

Dosya tabanlı uygulama yönergelerinin yanlış kullanımı

  • CS9297: #: yönergeleri dosyadaki ilk belirteçten sonra yer alamaz
  • CS9298: #: yönergeleri yalnızca dosya tabanlı uygulamalarda kullanılabilir (-features:FileBasedProgram)
  • CS9299: #: yönergeleri #if yönergesinden sonra olamaz
  • CS9314: #! yönergeleri yalnızca betiklerde veya dosya tabanlı uygulamalarda kullanılabilir
  • CS9378: '#!' dosyanın ilk satırındaki ilk karakterler olmalıdır

Bu hatalar, #! veya #: yönergelerini yanlış kullandığınızı gösterir. Bu yönergelerin söz dizimi hakkında daha fazla bilgi edinmek için dosya tabanlı uygulamalar bölümündeki ön işlemci yönergeleri makalesine bakın. Ya da dosya tabanlı uygulamalarla ilgili öğreticiyi izleyerek dosya tabanlı uygulamaları keşfedebilirsiniz.

Shebang (#!), bir betikte veya dosya tabanlı uygulamada hangi yürütülebilir dosyanın kullanılacağını belirtir. Herhangi bir boşluk, açıklama veya boş satırdan önce ilk satırın ilk karakterine yerleştirin (CS9378); dosya tabanlı uygulama yönerge kılavuzuna bakın.

Dosya script.cs yönergelerini içeriyor

Aşağıdaki hatalar C# betik yönergelerinin yanlış kullanıldığını veya yerleştirildiğini gösterir:

  • CS7009: Dosyadaki ilk belirteç sonrasında #r kullanılamıyor
  • CS7010: Alıntılanmış bir dosya adı bekleniyor
  • CS7011: #r yalnızca betiklerde izin verilir
  • CS8097: #load yalnızca betiklerde izin verilir
  • CS8098: Dosyadaki ilk belirteç sonrasında #load kullanılamaz

C# betiğinde (.csx ), belirteç sonrasındaki bir #load yönerge CS8098 üretir:

System.Console.WriteLine("This is the first token.");
#load "helpers.csx" // CS8098

CS8098'i düzeltmek için betikteki her belirtecin önüne her #load yönergeyi taşıyın:

#load "helpers.csx"
System.Console.WriteLine("The directive precedes the first token.");

Normal bir C# kaynak dosyasında ().cs#load izin verilmez. Bu ilgili koşul CS8098'i değil CS8097'yi üretir. #load öğesini normal kaynak dosyalardan kaldırın.