webentwicklung-frage-antwort-db.com.de

Enthält keine statische Hauptmethode, die für einen Einstiegspunkt geeignet ist

Ich fing an, meinen Code bis zum heutigen Tag in separaten CS-Dateien zu organisieren. Damit die Methoden, die mit der Benutzeroberfläche arbeiten, auch weiterhin ausgeführt werden können, würde ich den CS-Code unter demselben Namespace und öffentlichen Teilklassennamen erstellen, damit die Methoden dies tun können interoperabel sein. 

Mein Header sieht in vier Dateien so aus, einschließlich meiner Hauptdatei, die aufruft: 

public Shell()
{
InitializeComponent(); 
}

Headerbereich von .cs-Dateien, die mit der Benutzeroberfläche funktionieren (und diesen neuen Konflikt zu verursachen scheinen):

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Data.SqlServerCe;
using System.Diagnostics;
using System.Threading;
using System.Collections.Specialized;
using System.Net;
using System.Runtime.InteropServices;
using watin = WatiN.Core;
using WatiN.Core.Native.InternetExplorer;
using System.Web; 


namespace WindowsFormsApplication1
{

    public partial class Shell : Form
    {

Wenn ich jetzt versuche, meine Anwendung zu debuggen/in der Vorschau anzuzeigen (dies ist eine Windows-Anwendung in Visual Studio 2010 Express), wird die folgende Fehlermeldung angezeigt:

Enthält keine statische Hauptmethode, die für einen Einstiegspunkt geeignet ist

Ich habe in den Anwendungseigenschaften in Application-> Startup object nachgesehen, es bietet mir jedoch keine Optionen. Wie kann ich der Anwendung mitteilen, dass sie mit der .cs-Datei beginnen soll, die über meine InitializeComponent () verfügt; Befehl? 

  • Ich habe mich bisher ohne Lösung umgesehen.
  • Die Eigenschaften für jede CS-Datei werden auf "Kompilieren" festgelegt.
  • Ich sehe in meinem Solutions Explorer keine App.xaml-Datei, aber eine app.config-Datei.

Ich bin noch sehr neu und dies ist mein erster Versuch einer Organisierungsmethode mit c # -Code.

49
atwellpub

Ich habe mir auch dieses Problem angesehen, und in meinem Fall war die Lösung zu einfach. Ich habe der Lösung ein neues leeres Projekt hinzugefügt. Das neu hinzugefügte Projekt wird automatisch als Konsolenanwendung festgelegt. Da das hinzugefügte Projekt jedoch ein "leeres" Projekt war, war in diesem neuen Projekt kein Program.cs vorhanden. (Wie erwartet)

Ich musste lediglich den Ausgabetyp der Projekteigenschaften in Klassenbibliothek ändern

90
Arne

Ändern Sie den Ausgabetyp unter "Projekt"> "Eigenschaften" in "Klassenbibliothek". Diese Einstellung wurde möglicherweise standardmäßig auf eine "Konsolenanwendung" gesetzt.

53

Versuchen Sie, diese Methode einer Klasse hinzuzufügen, und sehen Sie, ob der Fehler immer noch auftritt:

[STAThread]
static void Main()
{
}
14
eyossi

Wenn Sie keine Datei namens Program.cs haben, fügen Sie einfach eine neue Klasse hinzu und nennen Sie sie Program.cs

Dann fügen Sie diesen Code ein:

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

 namespace Sales {
     static class Program {

         /// <summary>
         /// The main entry point for the application.
         /// </summary>
         [STAThread]
         static void Main() {
             Application.EnableVisualStyles();
             Application.SetCompatibleTextRenderingDefault(false);
             Application.Run(new Form1());
         }
     }

 }
11
ROM

Wenn Sie über eine Main-Methode verfügen, diese Fehlermeldung jedoch weiterhin angezeigt wird, stellen Sie sicher, dass für die Datei mit der Main-Methode "Build-Aktion" auf "Kompilieren" und "In das Ausgangsverzeichnis kopieren" auf "Nicht kopieren" gesetzt ist.

4
simonbs

hey, ich habe den gleichen Fehler und die Lösung für diesen Fehler ist, schreiben Sie einfach Capital M anstelle von kleinem m.

4
Chetan Soni
  1. Wählen Sie App.xaml und zeigen Sie seine Eigenschaften an. Setze Build Action auf ApplicationDefinition .
  2. App.xaml und die entsprechende * .cs-Datei müssen im Stammverzeichnis der * .csproj-Datei abgelegt werden, d. H. e. nicht in einen "Source" -Ordner.
3
Roman Volkov

Ich hatte diesen Fehler und löste ihn durch diese Lösung.

--> Right click on the project

--> and select "Properties"

--> then set "Output Type" to "Class Library".
3
Ali Ahmadi

Sieht aus wie ein Windows Forms-Projekt, das versucht, ein Startformular zu verwenden, aber aus irgendeinem Grund wird festgelegt, dass die Projekteigenschaften Main sind.

Wenn Sie das Anwendungsframework aktiviert haben, können Sie möglicherweise nicht sehen, dass Main aktiv ist (dies ist eine ungültige Konfiguration).

2
Joshua

Wenn Sie zulassen möchten, dass Parameter im Befehl angegeben werden, müssen sie folgendermaßen aussehen:

 [STAThread]
 static void Main(params string[] paramaters)
 {

sie können nicht mehr als einen Parameter angeben. Andernfalls wird auch der oben angegebene Fehler verursacht.

1

Für einige andere, die hierher kommen:

In meinem Fall hatte ich ein .csproj aus einem Beispielprojekt kopiert, das <EnableDefaultCompileItems>false</EnableDefaultCompileItems> ohne die Program.cs-Datei enthielt. Das Problem bestand darin, entweder EnableDefaultCompileItems zu entfernen oder Program.cs explizit in die Kompilierung aufzunehmen

1
Madison Haynie

Wenn Sie ein Klassenbibliothekprojekt verwenden, legen Sie in den Eigenschaften unter Anwendungsteil des Projekts die Klassenbibliothek als Ausgabetyp fest.

1
Manveer Singh

Für zukünftige Leser, die das gleiche Problem mit Windows Forms Application hatten, besteht eine Lösung darin, diese Zeilen zu Ihrer Haupt-/Startformularklasse hinzuzufügen:

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyMainForm());
    }

Gehen Sie dann zu Projekteigenschaften> Anwendung> Startobjekt-Dropdown-Menü. Der Namespace sollte angezeigt werden. Und es sollte funktionieren.

0
grumpy

Ich verwende Visual Studio und hatte auch dieses Problem. Ich habe einige Zeit gebraucht, aber in meinem Programm wurde es verursacht, weil ich versehentlich eine Klasse mit dem Namen "Program" gelöscht habe, die automatisch generiert wird.

0
MaChaToc

nachdem Ihre Hauptklasse gelöscht wurde, fügen Sie eine neue Klasse hinzu, deren Name als Main.cs festgelegt ist und diesen Code anstößt oder wenn porblem im Fenster so dasselbe Problem darstellt

using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using UIKit;

namespace your_PKG_name.iOS
{
       public class Application
        {
            // This is the main entry point of the application.
            static void Main(string[] args)
            {
                // if you want to use a different Application Delegate class from "AppDelegate"
                // you can specify it here.
                UIApplication.Main(args, null, "AppDelegate");

            }
        }
}
0
yash patel

Ein gültiger Eintrag sieht folgendermaßen aus:

public static class ConsoleProgram
    {
        [STAThread]
        static void Main()
        {
            Console.WriteLine("Got here");
            Console.ReadLine();
        }
    }

Ich hatte Probleme, als ich eine Webanwendung schreibe, aber für die furchtbare Ladezeit wollte ich dasselbe Projekt schnell in eine Konsolenanwendung konvertieren und schnelle Methodentests durchführen, ohne die gesamte Lösung zu laden.

Mein Einstiegspunkt wurde in /App_Code/Main.cs platziert, und ich musste Folgendes tun:

  1. Legen Sie Projekt -> Eigenschaften -> Anwendung -> Ausgabetyp = Konsolenanwendung fest
  2. Erstellen Sie den /App_Code/Main.cs
  3. Fügen Sie den obigen Code hinzu (und verweisen Sie auf die Methoden in meinem Projekt).
  4. Klicken Sie mit der rechten Maustaste auf die Datei Main.cs -> Eigenschaften -> Aktion erstellen = Kompilieren

Danach kann ich die Ausgabe (wie in Schritt 1 erwähnt) auf Class Library setzen, um die Website zu starten, oder auf Console Application, um den Konsolenmodus aufzurufen.

Warum habe ich dies anstelle von zwei separaten Projekten gemacht?

Einfach, weil ich Verweise auf Entity Framework und andere spezifische Verweise hatte, die Probleme bei der Ausführung von zwei separaten Projekten verursachten.

Für einfachere Lösungen würde ich immer noch zwei separate Projekte empfehlen, da die Konsolenausgabe hauptsächlich Testcode ist und Sie wahrscheinlich nicht riskieren möchten, dass der Produktionscode ausgeht.

0
Peter Kindberg

Wenn Sie tatsächlich über eine öffentliche statische Hauptmethode verfügen, können Ihre Build-Einstellungen wie in dieser Frage erläutert beschrieben werden: Das Programm "Troubleshooting" enthält keine statische "Main" -Methode ", wenn es eindeutig ...

0
A. Wilson

Auch ich bin mit diesem Problem konfrontiert. Dann wurde mir klar, dass ich eher Konsolenanwendung (Paket) als Konsolenanwendung wählte.

0

Salaam, ich habe sowohl Visual Studio 2017 als auch Visual Studio 2019

Visual Studio 2019 zeigt diesen Fehler nicht an, 2017 jedoch. Versuchen Sie, Visual Studio 2019 zu installieren.


_Visual Studio 2017
_

Visual Studio 2017


_Visual Studio 2019
_

Visual Studio 2019

0
Ali Jamal

Wenn Sie wie ich sind, haben Sie möglicherweise mit einer Klassenbibliothek begonnen und diese dann in eine Konsolenanwendung gewechselt. Wenn ja, ändern Sie dies ...

namespace ClassLibrary1
{
    public class Class1
    {
    }
}

Zu diesem ...

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
0
Adam Cox

Überprüfen Sie, ob das Projekt als "Startprojekt" festgelegt ist.

Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie "Als Startprojekt festlegen" aus dem Menü.

0
James Wierzba