2010-12-10 5 views
17

In meinem Projekt habe ich mehr als zwei Main-Methode mit der gleichen Signatur. Einer ist ein winForm und ein anderer ist Console-Klasse.Mehr als zwei Hauptmethode in Visual Studio-Anwendung?

So legen Sie einen von ihnen als Einstiegspunkt fest.

Ich erklärte [STAThread] vor einer Hauptmethode, um Einstiegspunkt zu setzen, aber es funktioniert nicht?

Ich bin mit Visual Studio Express 2010

+0

Das Attribut [STAThread] wird nicht für den Einstiegspunkt verwendet. –

Antwort

29

in den Projekteigenschaften von rechts Sehen Sie sich das Projekt in der Projektmappen-Explorer klicken und dann auf Eigenschaften. Auf der ersten Registerkarte sehen Sie eine Dropdown-Liste für den Einstiegspunkt. Wählen Sie die geeignete Hauptmethode aus.

+1

Ich bekomme keine Dropdown-Liste. (Nicht festgelegt) ist alleine da. Wenn alle vom gleichen Typ sind (entweder Windows oder Konsole), dann bekommen wir das. Aber mein Projekt hat beide, Formulare und Konsole – PawanS

+3

Es ist mit "Startup Object" gekennzeichnet. Hier ist ein Screenshot von einer neuen Konsolenanwendung. http://www.screencast.com/t/27JwRJ0F – Josh

+0

Ya danke, dass ich jetzt, nach dem Wiederaufbau der Lösung habe ich die Dropdown-Liste. Aber "Output type" muss ich einstellen. Es wäre Konsolentyp oder Windows-Anwendung. – PawanS

8

STAThread legt den Einstiegspunkt nicht fest - es zwingt die Laufzeit, ein Single-Threaded Apartment für den Thread zu verwenden, der Main ausführt.

Wie Josh sagt, müssen Sie das Startobjekt in den Projekteigenschaften festlegen. Wenn dies in VS Express nicht angezeigt wird, müssen Sie möglicherweise erzwingen, erweiterte Buildeigenschaften anzuzeigen: Öffnen Sie Extras \ Optionen, und aktivieren Sie unter Projekte und Lösungen die Option Erweiterte Buildkonfiguration anzeigen.

Beachten Sie, dass Ihre Anwendung entweder hat eine Konsole app oder eine WinForms-Anwendung sein. Es kann nur als eine Einheit erstellt werden (pro Konfiguration sowieso). Entweder wird am Ende eine Konsole angezeigt, die beim Starten als WinForms-App angezeigt wird, oder es wird keine Konsole angezeigt, wenn Sie sie als Konsolenanwendung starten.

Haben Sie darüber nachgedacht, den Großteil der Logik in eine Klassenbibliothek zu stellen und dann zwei Wrapper-Anwendungen - eine WinForms und eine Konsole - zu erstellen, die nur die relevante Benutzeroberfläche anzeigen und dann an die Klassenbibliothek delegieren?

+0

U r rechts. Ich habe die Lösung, einmal entweder Formulare oder nur Konsole gebaut. Nein, ich habe deine Idee nicht versucht. Kannst du ein bisschen mehr Details sein? Danke – PawanS

+0

@Pawan: Was brauchen Sie mehr Details? Verwenden Sie drei Projekte: eine Klassenbibliothek, eine WinForms, eine Konsole. Fügen Sie der Klassenbibliothek Verweise von jeder Konsolenanwendung und der WinForms-App hinzu. Dort legen Sie den Großteil Ihrer Logik ab. –

+0

Eigentlich können Sie es als Windows-EXE erstellen und dann eine Konsole bedingt (basierend auf einem Befehlszeilenparameter oder etwas) mit AllocConsole anzeigen, aber es ist ein wenig beteiligt und es hat einige unerwünschte Nebenwirkungen. Wenn Sie interessiert sind, sehen Sie diesen Beitrag. http://stackoverflow.com/questions/2348195/allocate-a-console-for-a-winform-application – Josh

-1

Ich glaube nicht, dass das funktioniert. Es wird nicht einmal kompilieren und beschweren, dass das Projekt zwei Hauptmethoden hat. Es darf nur eine public static main Methode im Projekt geben. Sie müssen den zweiten umbenennen/entfernen.

Übrigens, warum möchten Sie beide behalten?

+0

Das ist richtig, für zwei Hauptmethoden fühlt VS Ambiguität, was Einstiegspunkt ist.Und das war meine Frage Wie setze ich einen bestimmten Einstiegspunkt? Ein Projekt, das Benutzer zum Abrufen von Daten in der Konsole oder in Windows opt – PawanS

+0

Nicht wahr. Sie können zwei Hauptmethoden in einem einzelnen Projekt haben. – basarat

+0

ya ich meine, wir können haben ... aber welcher Einstiegspunkt ist imp. – PawanS

3

Wenn Programm hat zwei Hauptverfahren Compiler get confution so C# Programm setzte Hauptklasse geben

public Class one 

{ 
public static void main() 
{ 
System.console.writeline("One"); 
} 

public Class two 
{ 
public static void main() 
{ 
System.console.writeline("Two"); 
} 
} 

Laufe C# in der Konsole

CSC Multimain.cs/main laufen: ein

  • Ausgabe Eine

CSC Multimain.cs/main: zwei

  • Ausgang Zwei
+0

Es funktioniert nicht. –

+0

netter Vorschlag, um eine C# Datei mit VS cmd Prompt manuell auszuführen. Ich denke, das OP möchte in VS selbst verwenden. – Kira

0

Sie können mehr setzen dann ein Hauptverfahren in einzelnem Programm, sondern Programm mit einem Hauptverfahren wird zu einem Zeitpunkt, beispielsweise kompiliert werden: Copy Paste dieser Code in erster Linie Name Veröffentlichung Editor und Änderung und die Änderung sehen

#define Release 
using System; 
class Program 
{ 
#if Release==true 
    public static void Main(string[] args) //for enemy 
    {  
     Console.WriteLine("go to hell"); 
     Console.ReadLine(); 
    } 


#elif Release==false 
    static void Main(string[] args) //for friend 
    {  

     Console.WriteLine("hello "); 

     Console.ReadLine(); 
    } 

#endif 
} 
0

Sie auch auf diese Weise tun können, aber ich weiß nicht, wie die Hauptmethode eingestellt wird Einspeisepunkt

public static void Main(string args) 
    { 
     Console.WriteLine("this is second main method"); 
    } 

    public static void Main(string[] args) 
    { 
     Program.Main("second main method"); 
    } 
0

Dieses Problem wird durch leicht werden könnten Schritte hier 1. Öffnen Sie die Lösung 2 die beiden Klassen in separate Klassendateien 3. Klicken Sie auf die Registerkarte „Projekt“ aus dem Hauptmenüleiste 4. Verschieben aufgeteilt gelöst zum Cursor auf die Eigenschaft 5. Wählen Sie den gewünschten Klassennamen, den Sie für "Reference Path" ausführen möchten. 6. Kompilieren Sie das Projekt, der Fehler wird ausgeschaltet.

1

Sie können eine Main-Methode in jede deklarierte Klasse einfügen. Einige Programmierer nutzen dies, um eine kleine Test-App für jede deklarierte Klasse zu erstellen.

Wenn Sie jedoch mehr als eine Main-Methode unter den Klassen Ihres Projekts zu erklären, müssen Sie die IDE, um anzuzeigen, welche Sie möchten der App Einstiegspunkt sein. Dazu:

  1. Mit dem Projekt in Visual Studio geöffnet, wählen Sie Projekt> [Projektname] Eigenschaften ... (wo [Projektname] der Name Ihres Projekts ist).
  2. Wählen Sie die Klasse, die die Main-Methode enthält, die den Eintrag Punkt aus dem Startup-Objekt Listbox sein sollte.
Verwandte Themen