Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden de volgende compilerfouten en -waarschuwingen behandeld:
- CS0017: De uitvoerbestandsnaam van het programma heeft meer dan één ingangspunt gedefinieerd. Compileer met /main om het type op te geven dat het toegangspunt bevat.
- CS0028: 'functiedeclaratie' heeft de verkeerde handtekening als invoerpunt
- CS0402: 'id': een toegangspunt kan niet algemeen of in een algemeen type zijn
- CS1555: Kan klasse niet vinden die is opgegeven voor de main-methode
- CS1556: 'construct' opgegeven voor de main-methode moet een geldige klasse of struct zijn
- CS1557: Kan klasse niet gebruiken voor de main-methode omdat deze zich in een ander uitvoerbestand bevindt
- CS1558: 'klasse' heeft geen geschikte statische Main-methode
- CS1559: Kan object niet gebruiken voor de main-methode omdat het is geïmporteerd
- CS2017: Kan /main niet opgeven als u een module of bibliotheek bouwt
- CS5001: Het programma bevat geen statische 'Main'-methode die geschikt is voor een toegangspunt
- CS7022: Het toegangspunt van het programma is globale code, waarbij het invoerpunt '{0}' wordt genegeerd.
- CS8801: Kan geen lokale variabele of lokale functie gebruiken die{0} in deze context is gedeclareerd in een instructie op het hoogste niveau.
- CS8802: Slechts één compilatie-eenheid kan instructies op het hoogste niveau bevatten.
- CS8803: Instructies op het hoogste niveau moeten voorafgaan aan naamruimte- en typedeclaraties.
- CS8805: Programma met behulp van instructies op het hoogste niveau moet een uitvoerbaar bestand zijn.
- CS8899: Toegangspunten voor toepassingen kunnen niet worden toegeschreven aan 'UnmanagedCallersOnly'.
- CS8937: Ten minste één verklaring op het hoogste niveau moet inhoud hebben.
Main methodedeclaratie
- CS0017: De uitvoerbestandsnaam van het programma heeft meer dan één ingangspunt gedefinieerd. Compileer met /main om het type op te geven dat het toegangspunt bevat.
- CS0028: 'functiedeclaratie' heeft de verkeerde handtekening als invoerpunt
- CS0402: 'id': een toegangspunt kan niet algemeen of in een algemeen type zijn
- CS1558: 'klasse' heeft geen geschikte statische Main-methode
- CS5001: Het programma bevat geen statische 'Main'-methode die geschikt is voor een toegangspunt
- CS8899: Toegangspunten voor toepassingen kunnen niet worden toegeschreven aan 'UnmanagedCallersOnly'.
Een programma dat naar een uitvoerbaar bestand compileert, moet een geldige Main methode bevatten als toegangspunt. Zie Main() en opdrachtregelargumenten voor meer informatie.
Als u deze fouten wilt corrigeren, moet u ervoor zorgen dat uw Main methodedeclaratie de volgende regels volgt:
- Declareer de
Mainmethode alsstaticmet een retourtypevoid,intofTaskTask<int>, omdat voor de runtime een specifieke handtekening is vereist om het toegangspunt van het programma te identificeren (CS0028, CS1558). De methode kan desgewenst eenstring[]parameter accepteren voor opdrachtregelargumenten. Als u deasyncwijzigingsfunctie gebruikt, moet het retourtype zijnTaskofTask<int>, en moet u zich richten op C#-taal versie 7.1 of hoger. - Verplaats de
Mainmethode uit elk generiek type, omdat de runtime geen uniek toegangspunt kan bepalen wanneer het omvattende type type-argumenten vereist (CS0402). - Verwijder het UnmanagedCallersOnlyAttribute kenmerk uit de
Mainmethode, omdat toegangspunten kunnen worden aangeroepen vanuit beheerde code enUnmanagedCallersOnlyde methode beperkt tot alleen niet-beheerde aanroepers (CS8899). - Wanneer uw code meerdere
Mainmethoden voor verschillende typen bevat, gebruikt u de optie StartupObject compiler om op te geven welk type het beoogde toegangspunt bevat (CS0017). Zonder deze optie kan de compiler niet bepalen welkeMainmethode moet worden gebruikt. - Controleer of uw uitvoerbare project een
Mainmethode met een juiste handtekening definieert, omdat voor een project met een OutputType van exe of winexe een ingangspunt is vereist (CS5001, CS1558). De naam van de methode is hoofdlettergevoelig -mainkomt niet in aanmerking. Als u geen uitvoerbaar bestand nodig hebt, wijzigt u het uitvoertype in de bibliotheek.
Opmerking
CS0028 is een verouderde diagnose die de huidige C#-compiler niet produceert. Moderne versies van het compilerrapport CS1558 of CS5001 in plaats daarvan wanneer de Main methode een ongeldige handtekening heeft.
Opmerking
CS0017, CS0028, CS0402, CS1558 en CS5001 worden alleen gerapporteerd tijdens build - of herbouwbewerkingen . Ze worden niet weergegeven als IntelliSense-diagnostische gegevens terwijl u in de IDE typt.
StartupObject compileroptie
- CS1555: Kan klasse niet vinden die is opgegeven voor de main-methode
- CS1556: 'construct' opgegeven voor de main-methode moet een geldige klasse of struct zijn
- CS1557: Kan klasse niet gebruiken voor de main-methode omdat deze zich in een ander uitvoerbestand bevindt
- CS1559: Kan object niet gebruiken voor de main-methode omdat het is geïmporteerd
- CS2017: Kan /main niet opgeven als u een module of bibliotheek bouwt
Met de optie StartupObject-compiler (ook wel bekend als /main) wordt opgegeven welk type de methode van Main het programma bevat wanneer meerdere typen een methode definiëren. Zie StartupObject en Main() en opdrachtregelargumenten voor meer informatie.
Als u deze fouten wilt corrigeren, controleert u of de StartupObject optie verwijst naar een geldig type:
- Controleer of de volledig gekwalificeerde klassenaam die u doorgeeft, overeenkomt
StartupObjectmet een type dat is gedefinieerd in de broncode van de huidige compilatie. De compiler zoekt alleen in de bronbestanden die worden gecompileerd, niet in de verwante assembly's, naar het opgegeven type (CS1555). Controleer op typfouten in de volledig gekwalificeerde naam, inclusief de naamruimte. - Zorg ervoor dat de identifier die u aan
StartupObjectdoorgeeft, verwijst naar een niet-algemeenclassofstruct. Voor de compiler is een concreet type vereist dat een geldigeMainmethode (CS1556) kan bevatten. Interfaces, opsommingen, gedelegeerden en generieke typen kunnen niet worden gebruikt als doelen. - Verplaats de opgegeven klasse naar hetzelfde uitvoerbestand als de huidige compilatie. Met de
/mainoptie wordt het toegangspunt binnen één uitvoerassembly vastgesteld en kunnen geen typen worden verwezen die in een andere uitvoer zijn gecompileerd (CS1557). - Zorg ervoor dat het opgegeven type is gedefinieerd in de broncode van het huidige project in plaats van in een assembly waarnaar wordt verwezen. De compiler kan geen geïmporteerd type aanwijzen als het toegangspunt (CS1559).
- Verwijder de optie bij het
/mainbouwen van een bibliotheek of module. Alleen uitvoerbare projecten (met een OutputType van exe of winexe) hebben toegangspunten (CS2017). Als u een invoerpunt nodig hebt, wijzigt u het uitvoertype in een uitvoerbaar bestand. - Zorg ervoor dat het type dat is opgegeven door
StartupObjecteen geldigeMainmethode declareert. Als het type bestaat maar geen geschikte statischeMainmethode bevat, genereert de compiler CS1558. Zie deMainsectie methodedeclaratie voor de vereiste handtekening.
Opmerking
CS1557 en CS1559 zijn verouderde diagnostische gegevens die de huidige C#-compiler niet produceert. De scenario's die deze fouten hebben geactiveerd, worden niet meer ondersteund of treden te weinig op om detectie te rechtvaardigen.
Opmerking
CS1555 en CS1556 worden alleen gerapporteerd tijdens build - of herbouwbewerkingen . Ze worden niet weergegeven als IntelliSense-diagnostische gegevens terwijl u in de IDE typt.
Statements op topniveau
- CS7022: Het toegangspunt van het programma is globale code, waarbij het invoerpunt '{0}' wordt genegeerd.
- CS8801: Kan geen lokale variabele of lokale functie gebruiken die{0} in deze context is gedeclareerd in een instructie op het hoogste niveau.
- CS8802: Slechts één compilatie-eenheid kan instructies op het hoogste niveau bevatten.
- CS8803: Instructies op het hoogste niveau moeten voorafgaan aan naamruimte- en typedeclaraties.
- CS8805: Programma met behulp van instructies op het hoogste niveau moet een uitvoerbaar bestand zijn.
- CS8937: Ten minste één instructie op het hoogste niveau mag niet leeg zijn.
Instructies op het hoogste niveau vervangen de expliciete Main methode als ingangspunt van het programma. Zie voor meer informatie instructies op het hoogste niveau in de C# - programmeerhandleiding en de sectie met instructies op het hoogste niveau van de C#-taalspecificatie.
Als u deze fouten wilt corrigeren, moet u ervoor zorgen dat uw gebruik van instructies op het hoogste niveau de volgende regels volgt:
- Voeg alle instructies op het hoogste niveau samen in één bestand, omdat slechts één compilatie-eenheid (bestand) instructies op het hoogste niveau (CS8802) kan bevatten. Verplaats code op het hoogste niveau van andere bestanden naar dat ene bestand. Herstructureer de resterende bestanden zodat ze alleen naamruimte- en typedeclaraties bevatten.
- Plaats alle instructies op het hoogste niveau vóór een
namespaceoftypedeclaraties in het bestand, omdat de compiler vereist dat instructies op het hoogste niveau eerst worden weergegeven (CS8803). Als uusinginstructies hebt, kunnen deze instructies nog steeds voorafgaan aan de topniveau-instructies. - Neem ten minste één instructie op die uitvoerbare code bevat, omdat een bestand met alleen lege instructies, witruimte of opmerkingen niet in aanmerking komt als een geldig toegangspunt (CS8937). Voeg een instructie toe, zoals een methode-aanroep, variabeletoewijzing of expressie om aan de vereiste te voldoen.
- Alleen binnen de context van de instructie op het hoogste niveau zelf kunt u toegang krijgen tot lokale variabelen en lokale functies die op het hoogste niveau zijn gedeclareerd, omdat deze declaraties beperkt zijn tot de aangemaakte invoerpuntmethode en niet zichtbaar zijn voor andere bestanden of voor typen leden die in hetzelfde bestand zijn gedeclareerd (CS8801). Als u de status tussen bestanden wilt delen, declareert u de variabele als een statisch veld of een eigenschap voor een type.
- Stel het OutputType van het project in op exe, omdat topniveaustatements een entrypunt definiëren en entrypunten alleen geldig zijn in uitvoerbare projecten (CS8805). Als u een bibliotheek bouwt, verwijdert u de instructies op het hoogste niveau en gebruikt u in plaats daarvan typen en methoden.
- Verwijder of wijzig de naam van een expliciete
Mainmethode wanneer instructies op het hoogste niveau aanwezig zijn, omdat de compiler de instructies op het hoogste niveau behandelt als het toegangspunt en elkeMainmethode negeert, waardoor een waarschuwing (CS7022) wordt gegenereerd. Als u een explicieteMainmethode wilt gebruiken, verplaatst u de instructiecode op het hoogste niveau naar die methode en verwijdert u de instructies op het hoogste niveau.