Ich bin ein Anfänger in Sachen Programmierung, aber ich war mir sicher, dass eine der universellen Regeln war, dass ein Programm mit Main () beginnt. Ich sehe keine, wenn ich ein WPF-Projekt erstelle. Wird Main () in WPF einfach anders benannt?
128
Antworten:
Es wird während des Builds generiert, aber Sie können Ihr eigenes bereitstellen (bei Bedarf in Projekteigenschaften eindeutig definieren). Suchen Sie in obj / debug nach einer App-Datei. Ich habe (mit freundlicher Genehmigung von "C # 2010 Express")
App.g.i.cs
mit:quelle
App.g.cs
. Aber ich habe versucht, etwas hinzuzufügen,Main()
und jedes Mal, wenn ich mein Projekt neu aufbaute, kehrte es zu dem zurück, was Sie hier haben. Es wurde versucht, meine eigene in einer anderen Klasse zu erstellen, aber Project Properties findet nur MyProject.App, nicht die andere Klasse, kann es also nicht umleiten.App.xaml.cs
im Visual Studio öffnen . Verwenden Sie die Navigationsleiste> Dropdown-Liste Methode> AuswählenMain
(ausgegraut). Das bringt dich zuApp.g.i.cs
.Die Main () -Methode wird automatisch erstellt. Wenn Sie Ihre eigenen bereitstellen möchten, müssen Sie (getestet in VS2013 und VS2017):
Fügen Sie dann einfach eine Main () -Methode zu App.xaml.cs hinzu. Es könnte so sein:
quelle
Main()
wird automatisch von der CLR und der WPF bereitgestellt.Der C # -Compiler verwendet einen Befehlszeilenschalter,
/m
der den Typ angibt, der die Implementierung von enthältMain()
. Wenn kein Startobjekt explizit angegeben wird, sucht die CLR standardmäßig nach einer Klasse mit einer statischen AufladungMain()
Methode und ruft diese auf. (Wie @Marc Gravel in seinem Kommentar betonte)Im Fall von WPF wird das
Main()
automatisch generiert, wenn es erstelltApp.xaml
wird, und der Schalter / m wird angegeben, damit der C # -Compiler diese Klasse als Einstiegspunkt verwendet. Wenn Sie sich jedoch die Projekteigenschaften ansehen, werden Sie feststellen, dass Sie das Startobjekt auswählen können. Wenn Sie möchten, können Sie Ihre eigene Klasse bereitstellen, die implementiert wirdMain()
.Beachten Sie, dass Sie dafür verantwortlich sind, die
Application
Instanz zu erstellen und ihreRun()
Methode aufzurufen , um sicherzustellen, dass die WPF-Infrastruktur ordnungsgemäß gestartet wird.quelle
/m
es nicht egal , was die Art genannt wird; Wenn Sie nicht explizit sind, versucht es nur, eine geeigneteMain
Methode zu finden , und beschwert sich, wenn es 0 oder mehr als eine findet. Als Beispiel wird das Beispiel "Hello World" in der Sprachspezifikation (§1.1)Hello
als Typname verwendet .main()
dies von der CLR (der Laufzeit) bereitgestellt wird, es ist wirklich der Compiler, der es generiert.MyApp.App app = new MyApp.App();
) hinzufügen und sie aufrufen.Run()
muss, wie es die vorherigeMain()
getan hätte. Guter Anruf. Außerdem würde hinzufügen müssen ,app.InitializeComponent();
bevorapp.Run()
, und zum Glück für uns, die ursprünglicheInitializeComponent()
Methode ist immer noch da (in App.g.cs gesehen, so dass keine Notwendigkeit , dass man zurück zu addieren!).Main()
wird während der Kompilierung generiert. Sie finden es inApp.g.cs
(imobj/{Debug,Release}
Ordner).quelle
main()
ist ein Standardeinstiegspunkt für eine Anwendung, aber alle Anwendungen sind so strukturiert. In einem XAML-Projekt gibt die App.XAML-Datei den Einstiegspunkt an, an dem sie stehtStartupUri="MainWindow.xaml"
.Wie von anderen angegeben, wird die eigentliche Hauptfunktion basierend auf dem Inhalt der XAML-Dateien im Projekt generiert.
quelle
Ich habe Dateien, die nicht in ein anderes Projekt ohne Hauptfenster geladen wurden, in ein neues kopiert und diesen Fehler erhalten.
Für mich war es umgekehrt, Andreas Kahler zu helfen:
Nachdem ich eine Fensterdatei erstellt und die Start-URL auf diese Datei gesetzt hatte, wechselte ich Page zu ApplicationDefinition der App.xaml-Eigenschaft 'Build Action'.
quelle
Falls Sie die Standard-App.xaml und MinWindow.xaml entfernt haben, ist es besser, .csproj zu bearbeiten. Nach dem manuellen Hinzufügen von App.xaml lautet Ihre .csproj:
Ändern Sie dies in:
quelle