No Main() in WPF?
The Main() method is created automatically.If you want to provide your own you have to (tested in VS2013, VS2017 and VS2019):
- Right-click App.xaml in the solution explorer, select Properties
- Change 'Build Action' to 'Page' (initial value is 'ApplicationDefinition')
Then just add a Main() method to App.xaml.cs. It could be like this:
[STAThread]public static void Main(){ var application = new App(); application.InitializeComponent(); application.Run();}
It is generated during build, but you can provide your own (disambiguating it in project-properties as necessary). Look in obj/debug for an app file; I have (courtesy of "C# 2010 Express") App.g.i.cs
with:
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(); } }}
Main()
is automatically provided by the CLR and the WPF.
The C# compiler takes a command-line switch /m
which specifies the type that contains the implementation of Main()
. By convention, if no startup object is explicitly specified, the CLR will lookup any class that has a static Main()
method and will call it. (As @Marc Gravel pointed out in his comment)
In the case of WPF, the Main()
is automatically generated when App.xaml
is built and the /m switch is specified to make the C# compiler use that class as entry point. If you look at the project properties however, you'll find there's a setting for you to choose the startup object. So if you want, you can provide your own class that implements Main()
.
Note that this will put the responsibility on you to create the Application
instance and call its Run()
method to ensure that the WPF infrastructure is started properly.