Ich begann meinen Code heute in getrennten CS-Dateien zu organisieren. Damit die Methoden, die mit der Benutzeroberfläche zusammenarbeiten, weiterhin funktionieren, erstellte ich den CS-Code unter demselben Namespace und demselben öffentlichen Teilklassennamen, damit die Methoden dies konnten interoperabel sein.
Mein Header sieht in vier Dateien so aus, einschließlich meiner Hauptkerndatei, die Folgendes aufruft:
public shell()
{
InitializeComponent();
}
Header-Bereich 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 (übrigens ist dies eine Windows-Anwendung in Visual Studio 2010 Express), wird folgende Fehlermeldung angezeigt:
Enthält keine statische 'Haupt'-Methode, die für einen Einstiegspunkt geeignet ist
Ich habe in den Anwendungseigenschaften unter Anwendung-> Startobjekt nachgesehen, aber es bietet mir keine Optionen. Wie kann ich die Anwendung informieren, damit sie mit der CS-Datei beginnt, die meine InitializeComponent () enthält? Befehl?
- Ich habe mich bisher ohne Lösung umgesehen.
- Die Eigenschaften jeder CS-Datei sind auf "Kompilieren" festgelegt.
- Ich sehe keine App.xaml-Datei in meinem Solutions Explorer, aber eine app.config-Datei.
Ich bin noch sehr neu und dies ist mein erster Versuch einer Organisationsmethode mit C # -Code.
quelle
main
mit der richtigen Signatur. So weiß der Compiler, wie man ein Programm startet.[STAThread] static void Main(string[] args) { Application.Run(new shell()); }
Antworten:
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 es sich bei dem hinzugefügten Projekt jedoch um ein 'leeres' Projekt handelte, war in diesem neuen Projekt keine Program.cs vorhanden. (Wie erwartet)
Ich musste lediglich den Ausgabetyp der Projekteigenschaften in Klassenbibliothek ändern
quelle
static void main()
), um zu bestimmen, wo mit der Ausführung von Code begonnen werden soll. Klassenbibliotheken tun dies nicht - sie werden von anderen Bibliotheken aufgerufen, die bereits ausgeführt werden.main
in meinen beiden anderen Projekten nach einer Konsolenanwendung, genau wie das StartUp-Projekt. Durch Ändern dieser beiden "unterstützenden" Projekte in " Klassenbibliothek" in ihrem Eigenschaftenbildschirm wurde dies sofort behoben.Ändern Sie den Ausgabetyp unter Projekt> Eigenschaften in den einer „Klassenbibliothek“. Standardmäßig wurde diese Einstellung möglicherweise auf eine „Konsolenanwendung“ festgelegt.
quelle
Versuchen Sie, diese Methode einer Klasse hinzuzufügen, und prüfen Sie, ob der Fehler weiterhin angezeigt wird:
[STAThread] static void Main() { }
quelle
Ich hatte diesen Fehler und löste ihn mit dieser Lösung.
quelle
Wenn Sie keine Datei mit dem Namen haben
Program.cs
, fügen Sie einfach eine neue Klasse hinzu und benennen Sie sieProgram.cs
.Fügen Sie dann 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()); } } }
quelle
quelle
Wenn Sie eine Hauptmethode haben, aber dennoch diesen Fehler erhalten, stellen Sie sicher, dass für die Datei mit der Hauptmethode "Build-Aktion" auf "Kompilieren" und "In Ausgangsverzeichnis kopieren" auf "Nicht kopieren" gesetzt ist.
quelle
Für mich wurde der Fehler tatsächlich durch "Feature 'async main' ist in C # 7.0 nicht verfügbar. Bitte verwenden Sie die Sprachversion 7.1 oder höher" erzeugt. Dieses Problem führte zu der Meldung "Enthält keine statische Hauptmethode, die für einen Einstiegspunkt geeignet ist" in der Fehlerliste. Im Ausgabefenster wurde jedoch der Fehler "Nicht verfügbar" angezeigt. Um dies zu korrigieren, habe ich die Sprachversion unter "Erweiterte Build-Einstellungen" von "C # neueste Nebenversion (Standard)" in "C # neueste Nebenversion (neueste Version)" geändert.
quelle
Bearbeiten Sie die .csproj-Datei
<OutputType>Library</OutputType>
Prost !
quelle
Library
(mit einem KapitalL
) seinHey, ich habe den gleichen Fehler und die Lösung für diesen Fehler ist einfach Capital M anstelle von Small M zu schreiben. Beispiel: - static void Main () Ich hoffe, es hilft.
quelle
Hatte dieses Problem in VS 2017 verursacht durch:
statische asynchrone Aufgabe Main (string [] args)
(Die Funktion 'async main' ist in C # 7.0 nicht verfügbar. Bitte verwenden Sie die Sprachversion 7.1 oder höher. )
Hinzufügen
<LangVersion>latest</LangVersion>
zu app.csproj geholfen.
quelle
Sieht aus wie ein Windows Forms-Projekt, das versucht, ein Startformular zu verwenden, aber aus irgendeinem Grund sind die Projekteigenschaften auf "Start" als "Haupt" festgelegt.
Wenn Sie das Anwendungsframework aktiviert haben, können Sie möglicherweise nicht sehen, dass Main aktiv ist (dies ist eine ungültige Konfiguration).
quelle
Salaam, ich habe beide
Visual Studio 2017
undVisual Studio 2019
Visual Studio 2019 zeigt diesen Fehler nicht an, 2017 jedoch. Versuchen Sie, Visual Studio 2019 zu installieren.
Visual Studio 2017
Visual Studio 2019
quelle
Wenn Sie zulassen möchten, dass Parameter über den 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, da dies sonst auch den oben gemeldeten Fehler verursacht.
quelle
Für einige andere, die hierher kommen:
In meinem Fall hatte ich eine .csproj aus einem Beispielprojekt kopiert, das
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
ohne die Datei Program.cs enthalten war . Die Korrektur bestand darin, entweder EnableDefaultCompileItems zu entfernen oder Program.cs explizit in die Kompilierung aufzunehmenquelle
Wenn Ihre Hauptklasse gelöscht wurde, fügen Sie eine neue Klasse hinzu, deren Name als Main.cs festgelegt ist, und schädigen Sie diesen Code, oder wenn das Porblem im Fenster das gleiche 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"); } } }
quelle
Wenn Sie ein Klassenbibliotheksprojekt verwenden, legen Sie die Klassenbibliothek als Ausgabetyp in den Eigenschaften im Anwendungsabschnitt des Projekts fest.
quelle
Führen Sie die folgenden Schritte aus, nachdem Sie den obigen Code in Program.cs eingefügt haben:
Klicken Sie mit der rechten Maustaste auf das Projekt
Wählen Sie "Eigenschaften"
Stellen Sie "Ausgabetyp" auf "Windows-Anwendung"
Startobjekt: namepace.Program
quelle
Wenn Sie tatsächlich eine öffentliche statische Hauptmethode haben, können dies Ihre Build-Einstellungen sein, wie in dieser Frage erläutert: Fehlerbehebung "Programm enthält keine statische 'Haupt'-Methode", wenn dies eindeutig der Fall ist ...?
quelle
Auch ich habe mich diesem Problem gestellt. Dann wurde mir klar, dass ich Konsolenanwendung (Paket) anstelle von Konsolenanwendung auswählte.
quelle
Ich benutze Visual Studio und hatte auch dieses Problem. Es hat einige Zeit gedauert, aber in meinem Programm wurde es verursacht, weil ich versehentlich eine Klasse mit dem Namen "Programm" gelöscht habe, die automatisch generiert wird.
quelle
Für zukünftige Leser, die dasselbe Problem mit der Windows Forms-Anwendung 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-Liste. Der Namespace sollte angezeigt werden. MyMainForm, wählen Sie ihn aus, bereinigen Sie ihn und erstellen Sie die Lösung. Und es sollte funktionieren.
quelle
Ü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ü.
quelle
Wenn Sie wie ich sind, haben Sie möglicherweise mit einer Klassenbibliothek begonnen und diese dann auf eine Konsolenanwendung umgestellt. Wenn ja, ändern Sie dies ...
namespace ClassLibrary1 { public class Class1 { } }
Dazu ...
namespace ConsoleApp1 { class Program { static void Main(string[] args) { } } }
quelle
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 beim Schreiben einer Webanwendung, aber wegen der schrecklichen 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:
Danach kann ich die Ausgabe (wie in Schritt 1 erwähnt) auf Klassenbibliothek einstellen, um die Website zu starten, oder auf Konsolenanwendung, um in den Konsolenmodus zu wechseln.
Warum habe ich das anstelle von 2 separaten Projekten gemacht?
Einfach, weil ich Verweise auf Entity Framework und andere spezifische Verweise hatte, die Probleme beim Ausführen von zwei separaten Projekten verursachten.
Für einfachere Lösungen würde ich immer noch 2 separate Projekte empfehlen, da die Konsolenausgabe hauptsächlich Testcode ist und Sie wahrscheinlich nicht riskieren möchten, dass der Produktionscode ausgeht.
quelle