Reputation: 2870
I am a beginner when it comes to programming but I was sure that one of the universal rules was that a program starts with Main(). I do not see one when I create a WPF project. Is Main() simply named something differently in WPF?
Upvotes: 147
Views: 99424
Reputation: 1
To clear this is error, do the following steps:
App.Xaml
It will work fine - refer to this screenshot:
Upvotes: 0
Reputation: 2353
The Main() method is created automatically. If you want to provide your own you have to (tested in VS2013, VS2017 and VS2019):
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();
}
Upvotes: 156
Reputation: 31
In case you removed default App.xaml and MinWindow.xaml, better to edit .csproj After adding App.xaml manually, your .csproj will be:
<Page Include ="App.xaml">
<DependentUpon>MSBuild:Compile</DependentUpon>
<SubType>Code</SubType>
</Page>
Change this to:
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
Upvotes: 3
Reputation: 405
I copied files that wouldn't load in another project that was without a mainwindow into a new one and got this error.
For me it took doing the opposite approach to Andreas Kahler to fix:
After making a window file and setting the startup uri to this file i switched Page to ApplicationDefinition of App.xaml 'Build Action' property.
Upvotes: 1
Reputation: 75982
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.
Upvotes: 17
Reputation: 1262
main()
is a standard entry point for an application, but all applications are structured that way. In a XAML project, the App.XAML file specifies the entry point where it says StartupUri="MainWindow.xaml"
.
As it is stated by others, the actual main function is generated based on the contents of the XAML files in the project.
Upvotes: 6
Reputation: 1062502
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();
}
}
}
Upvotes: 81
Reputation: 35584
Main()
is generated during compilation. You can find it in App.g.cs
(in obj/{Debug,Release}
folder).
Upvotes: 10