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?
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();
}
}
}
Die Main () - Methode wird automatisch erstellt . Wenn Sie Ihre eigene angeben möchten, müssen Sie (getestet in VS2013 und VS2017):
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();
}
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.
Main()
wird beim Kompilieren generiert. Sie finden es in App.g.cs
(im Ordner obj/{Debug,Release}
).
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.
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'.
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>