Depanarea „programul nu conține o metodă statică ‘Main'” când este clar că conține…? (Programare, C#, Compilare)

adeena a intrebat.

Programul meu MS Visual C# se compila și rula foarte bine. închid MS Visual C# pentru a pleca și a face alte lucruri în viață.

Îl redeschid și (înainte de a face orice altceva) mă duc să „Public” programul meu și primesc următorul mesaj de eroare:

Programul C:myprogram.exe nu conține o metodă statică ‘Main’ potrivită pentru un punct de intrare

Huh? Ba da, conține… și totul funcționa cu 15 minute mai devreme. Sigur, pot să cred că din greșeală am lovit ceva sau am făcut ceva înainte de a-l închide… dar ce? Cum pot să rezolv această problemă?

Fișierul meu Program.cs arată așa:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;

namespace SimpleAIMLEditor
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new mainSAEForm());
        }
    }
}

…și sunt câteva comentarii acolo. Nu există alte erori.

Ajutor?

14 răspunsuri
Chițibușar

Proprietățile fișierului sunt setate pe Compile?

Comentarii

  • Asta a fost tot… Mă uitam la „build Actions” înainte de a o închide și probabil că din greșeală am tastat drumul meu pentru a seta Program.cs să nu compileze. Vă mulțumim! –  > Por adeena.
  • Cum pot să verific acest lucru? Am aceeași problemă aici… PS: Folosesc vs2012 –  > Por Michel Ayres.
  • Selectați fișierul în arborele proiectului și deschideți fereastra de proprietăți. Valoarea de sus ar trebui să fie cea corectă. –  > Por Quibblesome.
Basheer AL-MOMANI

M-am luptat cu această eroare doar pentru că unul dintre class library proiecte was set acceddentaly să fie un aplicație de consolă

așa că asigurați-vă că proiectele de bibliotecă de clasă este biblioteca de clasă în tipul de ieșire

Comentarii

  • În dotnet core, acest lucru adaugă următoarele la proiectul meu.csproj: <PropertyGroup> .... <ApplicationIcon /> <OutputType>Library</OutputType> <StartupObject /> </PropertyGroup> –  > Por Bert.
Freek Bos

Oke, mă uitam și eu la această problemă. Și în cazul meu soluțiile au fost prea ușoare. am adăugat un nou proiect gol la soluție. Proiectul nou adăugat este setat automat ca o aplicație de consolă. Dar, deoarece proiectul adăugat era un proiect „gol”, în acel nou proiect nu exista Program.cs. (Așa cum era de așteptat)

Tot ce a trebuit să fac a fost să schimb tipul de ieșire din proprietățile proiectului în Biblioteca de clase

Comentarii

  • Mulțumesc! Aceasta era problema mea 🙂 –  > Por Jen.
MrOnigiri

Dacă aveți o aplicație WPF sau Silverlight, asigurați-vă că App.xaml are „ApplicationDefinition” ca BuildAction în Proprietăți fișier.

Ali Ahmadi

Am avut această eroare și am rezolvat prin această soluție.

--> Right click on the project

--> and select "Properties"

--> then set "Output Type" to "Class Library".

Igal Tabachnik

Verificați proprietățile proiectului dvs. În fila „Application” (Aplicație), selectați Program clasa ca obiect de pornire:

Comentarii

  • Acest lucru trebuie setat doar atunci când există două metode statice Main. –  > Por configurator.
  • Ce se întâmplă dacă acel meniu derulant este gol? –  > Por Asbjørn Ulsberg.
  • Din greșeală mi-am schimbat proprietățile clasei și a șters acea proprietate, chiar și după ce am tastat din nou cum era… Mi-ați rezolvat problema, mulțumesc 🙂 –  > Por Alistair Bendall.
configurator

Este ciudat. Programul dvs. se compilează și rulează cu succes și eșuează doar la „Publicare” sau eșuează acum la fiecare compilare?

De asemenea, ați modificat poate proprietățile fișierului’ Build Action în altceva decât Compile?

Comentarii

  • Da – nu reușea la fiecare compilare și da – am schimbat din greșeală acțiunea de compilare pe Program.cs la „none” 🙂 –  > Por adeena.
  • Cum poate un utilizator cu 20k+ rep să posteze un „comentariu” ca răspuns, și să primească totuși upvotes? Sau asta chiar răspunde cumva la întrebare și pur și simplu nu am observat? –  > Por Alisson.
  • Nevermind, asta e din 2008 (am crezut că e recent pentru că era în LQ queue, my bad). –  > Por Alisson.
  • @Alisson în primul rând, da, răspunsul era din 2008, dar și al doilea paragraf a răspuns la întrebare. –  > Por configurator.
  • @configurator da, greșeala mea, pur și simplu nu am observat. Cred că ar fi trebuit să-ți editezi răspunsul pentru a arăta mai mult ca un răspuns real, iar acesta ar trebui să fie cel acceptat (din moment ce ai fost primul care a postat). Dar aceste lucruri se întâmplă, din păcate. –  > Por Alisson.
PontiusTheBarbarian

Eu am avut această problemă și este din cauză că nu foloseam cea mai recentă versiune de C# (C# 7.3 la data scrierii acestui articol) și a trebuit să modific ce urmează internal modificatorul de acces în public.

internal class Program
 {
    public static void Main(string[] args)
    {
        //My Code
    }
  }

sau modificați .csproj pentru a folosi cea mai recentă versiune de C# (acest mod a însemnat că am putut păstra clasa de mai sus ca fiind internal):

<PropertyGroup>
    <LangVersion>latest</LangVersion>
    <NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>

Roland Pihlakas

La mine a apărut aceeași eroare pentru că am redenumit clasa namespace al clasei Program.
Adresa „Startup object” din fila „Application” (Aplicație) din proiect face în continuare referire la vechiul spațiu de nume. Selectarea unui nou obiect de pornire a rezolvat problema și a eliminat, de asemenea, intrarea învechită din lista respectivă.
De asemenea, este posibil să doriți să actualizați „Default namespace” din aceeași filă „Application”.

Serghei Kalinichenko

Este important ca Main este plasată în clasa care este configurată corespunzător în Visual Studio ca obiect de pornire:

  • Faceți clic dreapta pe proiectul dvs. în exploratorul de proiecte; alegeți „Properties…”
  • În fereastra de dialog a proprietăților, alegeți fila „Application” (Aplicație)
  • În fila „Application”, alegeți SimpleAIMLEditor.Program din meniul derulant pentru obiectul de pornire

Acum rulați din nou aplicația dvs. Eroarea va dispărea.

Rich

Ceea ce am constatat este că fișierul Program.cs nu face parte din soluție. Am făcut un add existing item și am adăugat fișierul (Program.cs) înapoi în soluție.

Acest lucru a corectat eroarea: Eroare 1 Programul ‘….. nu conține o metodă statică ‘Main’ potrivită pentru un punct de intrare

satyajit

Problema mea este că am setat din greșeală argumentele pentru Main

static void Main(valoare obiect)

datorită instrumentului meu de refactorizare. Mi-a luat câteva minute să îmi dau seama, dar ar trebui să ajute pe cineva pe parcurs.

Abdul Rahman Kayali

În cazul meu (unde niciuna dintre soluțiile propuse nu se potrivește), problema a fost că am folosit async/await în cazul în care semnătura pentru main metodei arăta în felul următor:

static async void Main(string[] args)

Am eliminat pur și simplu async astfel încât semnătura main metoda să arate astfel:

static void Main(string[] args)

De asemenea, am eliminat toate instanțele de await și am folosit .Result pentru apelurile asincrone, astfel încât aplicația mea de consolă să poată fi compilată fără probleme.

Comentarii

  • async Task a fost, de asemenea, problema pentru mine – deoarece am vizat versiunea greșită de C#. Am adăugat acest lucru la csproj-ul meu și totul a început să funcționeze: <LangVersion>7.1</LangVersion><TargetLatestRuntimePatch>true</TargetLatestRuntimePatch> –  > Por Tom Carver.
James Hirschorn

Ce a funcționat pentru mine: Închideți MS Visual Studio, apoi porniți Visual Studio și deschideți soluția. Mesajul de eroare a dispărut apoi.