Aracılığıyla paylaş


Program giriş noktasıyla ilgili hataları ve uyarıları düzeltme

Bu makale aşağıdaki derleyici hatalarını ve uyarılarını kapsar:

  • CS0017: 'Çıkış dosyası adı' programının tanımlı birden fazla giriş noktası var. Giriş noktasını içeren türü belirtmek için /main ile derleyin.
  • CS0028: 'işlev bildirimi' giriş noktası olmak için yanlış imzaya sahip
  • CS0402: 'identifier': Giriş noktası genel veya genel türde olamaz
  • CS1555: Main yöntemi için belirtilen 'sınıf' bulunamadı
  • CS1556: Main yöntemi için belirtilen 'yapı' geçerli bir sınıf veya yapı olmalıdır
  • CS1557: Farklı bir çıkış dosyasında olduğundan Main yöntemi için 'class' kullanılamıyor
  • CS1558: 'class' uygun bir statik Main yöntemine sahip değil
  • CS1559: İçeri aktarıldığından Main yöntemi için 'object' kullanılamıyor
  • CS2017: Modül veya kitaplık oluştururken /main belirtilemez
  • CS5001: Program giriş noktası için uygun statik bir 'Main' yöntemi içermiyor
  • CS7022: Programın giriş noktası genel koddur; '{0}' giriş noktası yoksayılır.
  • CS8801: Bu bağlamda, üst düzey bir deyimde bildirilen yerel değişken veya yerel işlev '{0}' kullanılamaz.
  • CS8802: Yalnızca bir derleme biriminin üst düzey deyimleri olabilir.
  • CS8803: Üst düzey deyimlerin ad alanı ve tür bildirimlerinden önce olması gerekir.
  • CS8805: Üst düzey deyimleri kullanan program yürütülebilir bir dosya olmalıdır.
  • CS8899: Uygulama giriş noktaları 'UnmanagedCallersOnly' ile ilişkilendirilemez.
  • CS8937: En az bir üst düzey deyimi boş olmamalıdır.

Main yöntem bildirimi

  • CS0017: 'Çıkış dosyası adı' programının tanımlı birden fazla giriş noktası var. Giriş noktasını içeren türü belirtmek için /main ile derleyin.
  • CS0028: 'işlev bildirimi' giriş noktası olmak için yanlış imzaya sahip
  • CS0402: 'identifier': Giriş noktası genel veya genel türde olamaz
  • CS1558: 'class' uygun bir statik Main yöntemine sahip değil
  • CS5001: Program giriş noktası için uygun statik bir 'Main' yöntemi içermiyor
  • CS8899: Uygulama giriş noktaları 'UnmanagedCallersOnly' ile ilişkilendirilemez.

Yürütülebilir dosyaya derlenen bir program, giriş noktası olarak geçerli Main bir yöntem içermelidir. Daha fazla bilgi için bkz. Main() ve komut satırı bağımsız değişkenleri.

Bu hataları düzeltmek için yöntem bildiriminizin Main şu kurallara uydığından emin olun:

  • Main yöntemi, çalışma zamanı programın giriş noktasını (CS0028, CS1558) tanımlamak için belirli bir imza gerektirdiğinden, dönüş türü void, int, Task, veya Task<int> olan static olarak bildirilmelidir. yöntemi isteğe bağlı olarak komut satırı bağımsız değişkenleri için bir string[] parametre kabul edebilir. Eğer async değiştiricisini kullanıyorsanız, dönüş türü Task veya Task<int> olmalıdır ve C# dil sürümü 7.1 veya üzerini hedeflemelisiniz.
  • Main İçeren tür tür bağımsız değişkenleri (CS0402) gerektirdiğinde çalışma zamanı benzersiz bir giriş noktasını çözümleyemediğinden, yöntemi herhangi bir genel türden dışarı taşıyın.
  • UnmanagedCallersOnlyAttribute özniteliğini Main yönteminden kaldırın, çünkü giriş noktaları yönetilen koddan çağrılabilir olmalı ve UnmanagedCallersOnly yöntemi sadece yönetilmeyen arayanlarla kısıtlar (CS8899).
  • Kodunuz farklı türlerde birden çok Main yöntem içerdiğinde, hedeflenen giriş noktasını (CS0017) içeren türü belirtmek için StartupObject derleyici seçeneğini kullanın. Bu seçenek olmadan, derleyici hangi Main yöntemin kullanılacağını belirleyemez.
  • Main veya winexeOutputType içeren bir proje bir giriş noktası (CS5001, CS1558) gerektirdiğinden yürütülebilir projenizin doğru imzaya sahip bir yöntem tanımladığını doğrulayın. Yöntem adı büyük/küçük harfe duyarlıdır, bu nedenle main uygun değildir. Yürütülebilir dosyaya ihtiyacınız yoksa çıkış türünü kitaplık olarak değiştirin.

Uyarı

CS0028, geçerli C# derleyicisinin üretmediği eski bir tanılamadır. Derleyicinin modern sürümleri, yöntemin imzası geçersiz olduğunda CS1558 veya Main bildirir.

Uyarı

CS0017, CS0028, CS0402, CS1558 ve CS5001 yalnızca Derleme veya Yeniden Derleme işlemleri sırasında bildirilir. IDE'de yazarken IntelliSense tanılaması olarak görünmezler.

StartupObject derleyici seçeneği

  • CS1555: Main yöntemi için belirtilen 'sınıf' bulunamadı
  • CS1556: Main yöntemi için belirtilen 'yapı' geçerli bir sınıf veya yapı olmalıdır
  • CS1557: Farklı bir çıkış dosyasında olduğundan Main yöntemi için 'class' kullanılamıyor
  • CS1559: Yüklendiğinden Main metodu için 'object' kullanılamıyor
  • CS2017: Modül veya kitaplık oluştururken /main belirtilemez

StartupObject derleyici seçeneği (olarak /mainda bilinir), birden çok tür tanımladığında programın Main yöntemini içeren türü belirtir. Daha fazla bilgi için bkz. StartupObject ve Main() ve komut satırı bağımsız değişkenleri.

Bu hataları düzeltmek için, StartupObject seçeneğinin geçerli bir türe başvurduğundan emin olun:

  • Belirttiğiniz StartupObject tam sınıf adının, geçerli derlemenin kaynak kodunda tanımlanan bir türle eşleştiğini doğrulayın. Derleyici, belirtilen tür (CS1555) için yalnızca derlenen kaynak dosyaları arar; başvurulan bütünleştirilmiş kodları değil. Ad alanı da dahil olmak üzere tam nitelikli adda yazım hatalarını kontrol edin.
  • Emin olun ki StartupObject tanımlayıcısı, genel olmayan bir class veya struct öğesine başvurur. Derleyici, geçerli Main bir yöntem (CS1556) içerebilen somut bir tür gerektirir. Arabirimler, numaralandırmalar, temsilciler ve genel türler geçersiz hedeftir.
  • Belirtilen sınıfı geçerli derlemeyle aynı çıkış dosyasına taşıyın. /main seçeneği, giriş noktasını tek bir çıkış derlemesi içinde çözümler ve farklı bir çıkışta derlenen türlere referans veremez (CS1557).
  • Belirtilen türün başvuruda bulunılan derleme yerine geçerli projenin kaynak kodunda tanımlandığından emin olun. Derleyici içeri aktarılan bir türü giriş noktası (CS1559) olarak ayarlayamaz.
  • /main seçeneğini, bir kitaplık veya modül oluştururken kaldırın. Yalnızca yürütülebilir projelerin (OutputType değeri exe veya winexe olan) giriş noktaları (CS2017) vardır. Bir giriş noktasına ihtiyacınız varsa çıkış türünü yürütülebilir dosya olarak değiştirin.
  • Emin olun, StartupObject tarafından belirtilen tür geçerli bir Main metodu bildiriyor. Tür varsa ancak uygun bir statik Main yöntem içermiyorsa, derleyici CS1558 oluşturur. Gerekli imza için yöntem bildirimi bölümüne bakın.Main

Uyarı

CS1557 ve CS1559, geçerli C# derleyicisinin üretmediği eski tanılamalardır. Bu hataları tetikleyen senaryolar artık desteklenmiyor veya algılamayı garanti etmek için çok seyrek gerçekleşiyor.

Uyarı

CS1555 ve CS1556 yalnızca Derleme veya Yeniden Derleme işlemleri sırasında bildirilir. Siz IDE'ye yazarken IntelliSense tanılaması olarak görünmezler.

Üst düzey ifadeler

  • CS7022: Programın giriş noktası genel koddur; '{0}' giriş noktası yoksayılır.
  • CS8801: Bu bağlamda en üst düzey deyimde bildirilen {0} yerel değişkeni veya yerel işlevi kullanılamaz.
  • CS8802: Yalnızca bir derleme biriminin üst düzey deyimleri olabilir.
  • CS8803: Üst düzey deyimlerin ad alanı ve tür bildirimlerinden önce olması gerekir.
  • CS8805: Üst düzey deyimleri kullanan program yürütülebilir bir dosya olmalıdır.
  • CS8937: En az bir üst düzey deyimi boş olmamalıdır.

Üst düzey deyimler , programın giriş noktası olarak açık Main yöntemin yerini alır. Daha fazla bilgi için bkz C# programlama kılavuzundaki üst düzey deyimler ve üst düzey deyimler özellik belirtimi.

Bu hataları düzeltmek için üst düzey deyimleri kullanımınızın şu kurallara uydığından emin olun:

  • Yalnızca bir derleme birimi (dosya) en üst düzey deyimler (CS8802) içerebileceğinden, tüm üst düzey deyimleri tek bir dosyada birleştirin. Diğer dosyalardan en üst düzey kodları tek bir dosyaya taşıyın. Kalan dosyaları yalnızca ad alanı ve tür bildirimleri içerecek şekilde yeniden yapılandırın.
  • Derleyici en üst düzey deyimlerin ilk sırada görünmesini gerektirdiğinden tüm üst düzey deyimleri dosyadaki herhangi bir namespace veya type bildirimin önüne yerleştirin (CS8803). Yönergeleriniz using varsa, bu yönergeler yine de en üst düzey deyimlerden önce gelebilir.
  • Yalnızca boş deyimler, boşluklar veya açıklamalar içeren bir dosya, geçerli bir giriş noktası olarak kabul edilmez (CS8937). Bu nedenle, yürütülebilir kod içeren en az bir deyim ekleyin. Gereksinimi karşılamak için yöntem çağrısı, değişken ataması veya ifade gibi bir deyim ekleyin.
  • En üst düzey deyimlerde bildirilen yerel değişkenlere ve yerel işlevlere yalnızca üst düzey deyim bağlamının içinden erişin, çünkü bu bildirimler oluşturulan giriş noktası yöntemine bağımlı olup, diğer dosyalara veya aynı dosyada bildirilen tür üyelerine (CS8801) görünür değildir. Durumu dosyalar arasında paylaşmanız gerekiyorsa, değişkeni bir tür üzerinde statik alan veya özellik olarak bildirin.
  • Üst düzey deyimler bir giriş noktası tanımladığından ve giriş noktaları yalnızca yürütülebilir projelerde (CS8805) geçerli olduğundan projenin OutputType değerini exe olarak ayarlayın. Kitaplık oluşturuyorsanız, en üst düzey ifadeleri kaldırın ve bunun yerine türler ve metotları kullanın.
  • Derleyici üst düzey deyimleri giriş noktası olarak değerlendirdiğinden ve herhangi bir açık Main veya Main yöntemini dikkate almadığından, üst düzey deyimler varsa tüm açık Main veya Main yöntemlerini kaldırın veya yeniden adlandırın; aksi takdirde uyarı (CS7022) üretir. Açık Main bir yöntem kullanmayı planlıyorsanız, üst düzey deyim kodunu bu yönteme taşıyın ve üst düzey deyimlerini kaldırın.