Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano następujące błędy i ostrzeżenia kompilatora:
- CS0017: Program "nazwa pliku wyjściowego" ma zdefiniowany więcej niż jeden punkt wejścia. Skompiluj z /main, aby określić typ, który zawiera punkt wejścia.
- CS0028: "deklaracja funkcji" ma niewłaściwy podpis jako punkt wejścia
- CS0402: "identyfikator": punkt wejścia nie może być ogólny lub w typie ogólnym
- CS1555: Nie można odnaleźć klasy określonej dla metody Main
- CS1556: "konstrukcja" określona dla metody Main musi być prawidłową klasą lub strukturą
- CS1557: Nie można użyć klasy dla metody Main, ponieważ znajduje się w innym pliku wyjściowym
- CS1558: "klasa" nie ma odpowiedniej statycznej metody Main
- CS1559: Nie można użyć obiektu "object" dla metody Main, ponieważ jest importowany
- CS2017: Nie można określić /main, jeśli kompilujesz moduł lub bibliotekę
- CS5001: Program nie zawiera statycznej metody "Main" odpowiedniej dla punktu wejścia
- CS7022: Punkt wejścia programu jest kodem globalnym, ignorując punkt wejścia "{0}".
- CS8801: Nie można użyć zmiennej lokalnej ani funkcji lokalnej "{0}" zadeklarowanej w instrukcji najwyższego poziomu w tym kontekście.
- CS8802: Tylko jedna jednostka kompilacji może zawierać instrukcje najwyższego poziomu.
- CS8803: Instrukcje najwyższego poziomu muszą poprzedzać przestrzeń nazw i deklaracje typów.
- CS8805: Program używający instrukcji najwyższego poziomu musi być plikiem wykonywalnym.
- CS8899: Punkty wejścia aplikacji nie mogą być przypisywane "UnmanagedCallersOnly".
- CS8937: Co najmniej jedna instrukcja najwyższego poziomu musi być niepusta.
Main deklaracja metody
- CS0017: Program "nazwa pliku wyjściowego" ma zdefiniowany więcej niż jeden punkt wejścia. Skompiluj z /main, aby określić typ, który zawiera punkt wejścia.
- CS0028: "deklaracja funkcji" ma niewłaściwy podpis jako punkt wejścia
- CS0402: "identyfikator": punkt wejścia nie może być ogólny lub w typie ogólnym
- CS1558: "klasa" nie ma odpowiedniej statycznej metody Main
- CS5001: Program nie zawiera statycznej metody "Main" odpowiedniej dla punktu wejścia
- CS8899: Punkty wejścia aplikacji nie mogą być przypisywane "UnmanagedCallersOnly".
Program kompilujący do pliku wykonywalnego musi zawierać prawidłową Main metodę jako punkt wejścia. Aby uzyskać więcej informacji, zobacz Main() i argumenty wiersza polecenia.
Aby naprawić te błędy, upewnij się, że Main deklaracja metody jest zgodna z następującymi regułami:
- Zadeklaruj metodę
Mainjakostatic, przy zwracanym typievoid,int,TasklubTask<int>, ponieważ środowisko uruchomieniowe wymaga szczególnego podpisu do identyfikacji punktu wejścia programu (CS0028, CS1558). Metoda może opcjonalnie zaakceptowaćstring[]parametr argumentów wiersza polecenia. Jeśli używasz modyfikatoraasync, typ zwracany musi byćTasklubTask<int>, a docelowa wersja języka C# to 7.1 lub nowsza. - Przenieś metodę
Mainz dowolnego typu ogólnego, ponieważ środowisko uruchomieniowe nie może rozpoznać unikatowego punktu wejścia, gdy typ zawierający wymaga argumentów typu (CS0402). -
UnmanagedCallersOnlyAttribute Usuń atrybut z metody, ponieważ punkty wejścia muszą być wywoływane z kodu zarządzanego
MainiUnmanagedCallersOnlyogranicza metodę tylko do niezarządzanych wywołań (CS8899). - Jeśli kod zawiera wiele
Mainmetod w różnych typach, użyj opcji kompilatora StartupObject , aby określić, który typ zawiera zamierzony punkt wejścia (CS0017). Bez tej opcji kompilator nie może określić, któraMainmetoda ma być używana. - Sprawdź, czy projekt wykonywalny definiuje metodę
Mainz poprawnym podpisem, ponieważ projekt z OutputTypeexe lub winexe wymaga punktu wejścia (CS5001, CS1558). Nazwa metody jest rozróżniana według wielkości liter —mainnie spełnia wymagań. Jeśli nie potrzebujesz pliku wykonywalnego, zmień typ danych wyjściowych na bibliotekę.
Uwaga / Notatka
CS0028 to starsza diagnostyka, która nie jest generowana przez obecny kompilator C#. Nowoczesne wersje kompilatora raportują CS1558 lub CS5001 zamiast tego, gdy metoda Main ma nieprawidłowy podpis.
Uwaga / Notatka
CS0017, CS0028, CS0402, CS1558 i CS5001 są zgłaszane tylko podczas operacji kompilacji lub odbudowywania . Nie są wyświetlane jako diagnostyka IntelliSense podczas pisania w IDE.
StartupObject Opcja kompilatora
- CS1555: Nie można odnaleźć klasy określonej dla metody Main
- CS1556: "konstrukcja" określona dla metody Main musi być prawidłową klasą lub strukturą
- CS1557: Nie można użyć klasy dla metody Main, ponieważ znajduje się w innym pliku wyjściowym
- CS1559: Nie można użyć obiektu "object" dla metody Main, ponieważ jest importowany
- CS2017: Nie można określić /main, podczas kompilowania modułu lub biblioteki
Opcja kompilatora StartupObject (znana również jako /main) określa, który typ zawiera metodę programu Main , gdy zdefiniowano jeden z wielu typów. Aby uzyskać więcej informacji, zobacz StartupObject i Main() oraz argumenty wiersza polecenia.
Aby naprawić te błędy, upewnij się, że StartupObject opcja odwołuje się do prawidłowego typu:
- Sprawdź, czy przekazana w pełni kwalifikowana nazwa
StartupObjectklasy jest zgodna z typem zdefiniowanym w kodzie źródłowym bieżącej kompilacji. Kompilator przeszukuje tylko pliki źródłowe, które są kompilowane – nie zestawy odwołań – dla określonego typu (CS1555). Sprawdź pisownię w pełnej nazwie kwalifikowanej, w tym przestrzeni nazw. - Upewnij się, że przekazany identyfikator
StartupObjectodwołuje się do elementu innego niż ogólnyclasslubstruct. Kompilator wymaga konkretnego typu, który może zawierać prawidłowąMainmetodę (CS1556). Interfejsy, wyliczenia, delegaty i typy ogólne nie są prawidłowymi obiektami docelowymi. - Przenieś określoną klasę do tego samego pliku wyjściowego co bieżąca kompilacja. Opcja
/mainrozwiązuje punkt wejścia w ramach pojedynczego zestawu wyjściowego i nie może odwoływać się do typów skompilowanych do innych danych wyjściowych (CS1557). - Upewnij się, że określony typ jest zdefiniowany w kodzie źródłowym bieżącego projektu, a nie w przywoływanym zestawie. Kompilator nie może wyznaczyć zaimportowanego typu jako punktu wejścia (CS1559).
-
/mainUsuń opcję podczas kompilowania biblioteki lub modułu. Tylko projekty wykonywalne (z parametrem OutputTypeexe lub winexe) mają punkty wejścia (CS2017). Jeśli potrzebujesz punktu wejścia, zmień typ danych wyjściowych na plik wykonywalny. - Upewnij się, że typ określony przez
StartupObjectdeklaruje prawidłowąMainmetodę. Jeśli typ istnieje, ale nie zawiera odpowiedniej metody statycznejMain, kompilator generuje CS1558. Zobacz sekcjęMaindeklaracji metody dla wymaganego podpisu.
Uwaga / Notatka
CS1557 i CS1559 to starsza diagnostyka, które nie są generowane przez bieżący kompilator języka C#. Scenariusze, które wyzwoliły te błędy, nie są już obsługiwane lub występują zbyt często, aby uzasadnić wykrywanie.
Uwaga / Notatka
Cs1555 i CS1556 są zgłaszane tylko podczas operacji kompilacji lub odbudowywania . Nie są wyświetlane jako diagnostyka IntelliSense podczas pisania w IDE.
Wyrażenia najwyższego poziomu
- CS7022: Punkt wejścia programu jest kodem globalnym, ignorując punkt wejścia "{0}".
- CS8801: Nie można użyć zmiennej lokalnej ani funkcji lokalnej "{0}" zadeklarowanej w instrukcji najwyższego poziomu w tym kontekście.
- CS8802: Tylko jedna jednostka kompilacji może zawierać instrukcje najwyższego poziomu.
- CS8803: Instrukcje najwyższego poziomu muszą poprzedzać przestrzeń nazw i deklaracje typów.
- CS8805: Program używający instrukcji najwyższego poziomu musi być plikiem wykonywalnym.
- CS8937: Co najmniej jedna instrukcja najwyższego poziomu musi być niepusta.
Instrukcje najwyższego poziomu zastępują jawną Main metodę jako punkt wejścia programu. Aby uzyskać więcej informacji, zobacz Instrukcje najwyższego poziomu w przewodniku programowania w języku C# i specyfikacji funkcji instrukcji najwyższego poziomu .
Aby naprawić te błędy, upewnij się, że użycie instrukcji najwyższego poziomu jest zgodne z następującymi regułami:
- Skonsoliduj wszystkie instrukcje najwyższego poziomu w jednym pliku, ponieważ tylko jedna jednostka kompilacji (plik) może zawierać instrukcje najwyższego poziomu (CS8802). Przenieś dowolny kod najwyższego poziomu z innych plików do tego pojedynczego pliku. Zmień strukturę pozostałych plików, tak aby zawierały tylko przestrzeń nazw i deklaracje typów.
- Umieść wszystkie instrukcje najwyższego poziomu przed dowolnymi
namespacedeklaracjami lubtypew pliku, ponieważ kompilator wymaga, aby instrukcje najwyższego poziomu pojawiały się jako pierwsze (CS8803). Jeśli masz dyrektywyusing, te dyrektywy nadal mogą poprzedzać instrukcje najwyższego poziomu. - Dołącz co najmniej jedną instrukcję zawierającą kod wykonywalny, ponieważ plik zawierający tylko puste instrukcje, białe znaki lub komentarze nie kwalifikują się jako prawidłowy punkt wejścia (CS8937). Dodaj instrukcję, taką jak wywołanie metody, przypisanie zmiennej lub wyrażenie, aby spełnić wymaganie.
- Dostęp do zmiennych lokalnych i funkcji lokalnych zadeklarowanych w instrukcjach najwyższego poziomu tylko z poziomu samego kontekstu instrukcji najwyższego poziomu, ponieważ te deklaracje są ograniczone do metody wygenerowanego punktu wejścia i nie są widoczne dla innych plików ani elementów członkowskich typu zadeklarowanych w tym samym pliku (CS8801). Jeśli chcesz udostępnić stan między plikami, zadeklaruj zmienną jako pole statyczne lub właściwość w typie.
- Ustaw parametr OutputType projektu na exe, ponieważ instrukcje najwyższego poziomu definiują punkt wejścia i punkty wejścia są prawidłowe tylko w projektach wykonywalnych (CS8805). Jeśli tworzysz bibliotekę, usuń instrukcje najwyższego poziomu i zamiast tego użyj typów i metod.
- Usuń lub zmień nazwę dowolnej jawnej
Mainmetody, gdy są obecne instrukcje najwyższego poziomu, ponieważ kompilator traktuje instrukcje najwyższego poziomu jako punkt wejścia i ignoruje dowolnąMainmetodę, generując ostrzeżenie (CS7022). Jeśli zamierzasz użyć metody jawnejMain, przenieś kod instrukcji najwyższego poziomu do tej metody i usuń instrukcje najwyższego poziomu.