wake-up-neo.com

Kein Main () in WPF?

Ich bin ein Anfänger, wenn es ums Programmieren geht, aber ich war mir sicher, dass eine der allgemeinen Regeln war, dass ein Programm mit Main () beginnt. Ich sehe keine, wenn ich ein WPF-Projekt erstelle. Wird Main () in WPF einfach anders benannt?

106
Juice

Es wird während des Builds generiert, Sie können jedoch Ihre eigene angeben (in den Projekt-Eigenschaften nach Bedarf unterscheiden). Suchen Sie in obj/debug nach einer App-Datei. Ich habe (mit freundlicher Genehmigung von "C # 2010 Express") App.g.i.cs mit:

namespace WpfApplication1 {


    /// <summary>
    /// App
    /// </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
    public partial class App : System.Windows.Application {

        /// <summary>
        /// InitializeComponent
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public void InitializeComponent() {

            #line 4 "..\..\..\App.xaml"
            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

            #line default
            #line hidden
        }

        /// <summary>
        /// Application Entry Point.
        /// </summary>
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public static void Main() {
            WpfApplication1.App app = new WpfApplication1.App();
            app.InitializeComponent();
            app.Run();
        }
    }
}
69
Marc Gravell

Die Main () - Methode wird automatisch erstellt . Wenn Sie Ihre eigene angeben möchten, müssen Sie (getestet in VS2013 und VS2017):

  • Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf App.xaml, und wählen Sie Eigenschaften aus
  • Ändern Sie "Build-Aktion" in "Seite" (Anfangswert ist "ApplicationDefinition")

Dann fügen Sie einfach eine Main () - Methode zu App.xaml.cs hinzu. Es könnte so sein:

[STAThread]
public static void Main()
{
    var application = new App();
    application.InitializeComponent();
    application.Run();
}
100
Andreas Kahler

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 Main() enthält. Wenn kein Startobjekt explizit angegeben wird, sucht die CLR nach jeder Klasse, die über eine statische Main()-Methode verfügt, und ruft sie auf. (Wie @Marc Gravel in seinem Kommentar hervorhebt)

Im Fall von WPF wird Main() automatisch generiert, wenn App.xaml erstellt wird und die Option/m angegeben wird, damit der C # -Compiler diese Klasse als Einstiegspunkt verwendet. Wenn Sie sich die Projekteigenschaften ansehen, finden Sie jedoch eine Einstellung zum Auswählen des Startobjekts. Wenn Sie möchten, können Sie Ihre eigene Klasse bereitstellen, die Main() implementiert.

Beachten Sie, dass Sie dadurch die Verantwortung für das Erstellen der Application-Instanz übernehmen und die Run()-Methode aufrufen, um sicherzustellen, dass die WPF-Infrastruktur ordnungsgemäß gestartet wird.

13
Franci Penov

Main() wird beim Kompilieren generiert. Sie finden es in App.g.cs (im Ordner obj/{Debug,Release}).

6
Vlad

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 StartupUri="MainWindow.xaml" angegeben ist.

Wie von anderen angegeben, wird die eigentliche Hauptfunktion basierend auf den Inhalten der XAML-Dateien im Projekt generiert.

5
Annath

Ich kopierte Dateien, die nicht in ein anderes Projekt geladen wurden, das ohne Hauptfenster war, in ein neues und erhielt diesen Fehler. 

Für mich war es umgekehrt, Andreas Kahler zu ändern:

Nachdem ich eine Fensterdatei erstellt und den Start-URI auf diese Datei gesetzt hatte, wechselte Page zu ApplicationDefinition of App.xaml 'Build Action'.

0
Declan Taylor

Falls Sie die Standardeinstellungen App.xaml und MinWindow.xaml entfernt haben, bearbeiten Sie besser .csproj

<Page Include ="App.xaml">
       <DependentUpon>MSBuild:Compile</DependentUpon>
       <SubType>Code</SubType>
</Page>

Ändern Sie dies in:

<ApplicationDefinition Include="App.xaml">
    <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
</ApplicationDefinition>
0
user10372515