没有Main()在WPF?
在编程方面,我是初学者,但我确定其中一个普遍规则是程序以Main()开头。 我创build一个WPF项目时没有看到。 Main()在WPF中的命名方式有所不同吗?
它是在构build过程中生成的,但是您可以自行提供(根据需要在项目属性中对其进行消歧)。 在obj / debug中查找一个应用程序文件; 我有(“C#2010 Express”礼貌) App.gics
:
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()是自动创build的。 如果你想提供你自己的,你必须(在VS2013testing):
- 右键单击解决scheme资源pipe理器中的App.xaml,select属性
- 将“构build操作”更改为“页面”(初始值为“ApplicationDefinition”)
然后,只需将一个Main()方法添加到App.xaml.cs. 这可能是这样的:
[STAThread] public static void Main() { var application = new App(); application.InitializeComponent(); application.Run(); }
Main()
是由CLR和WPF自动提供的。
C#编译器采用命令行开关/m
,它指定包含Main()
的实现的types。 按照惯例,如果没有明确指定启动对象,CLR将查找任何具有静态Main()
方法的类并将调用它。 (正如@Marc Gravel在他的评论中指出的那样)
在WPF的情况下,当构buildApp.xaml
时自动生成Main()
并且指定/ m开关以使C#编译器使用该类作为入口点。 但是,如果您查看项目属性,则会发现有一个设置可供您select启动对象。 所以如果你想,你可以提供你自己的实现Main()
。
请注意,这将使您负责创buildApplication
实例并调用其Run()
方法,以确保WPF基础结构已正确启动。
Main()
在编译过程中生成。 你可以在App.g.cs
find它(在obj/{Debug,Release}
文件夹中)。
main()
是应用程序的标准入口点,但所有应用程序都是以这种方式构build的。 在XAML项目中,App.XAML文件指定StartupUri="MainWindow.xaml"
的入口点。
正如其他人所说,实际的主要function是根据项目中XAML文件的内容生成的。
我将不会加载到另一个没有主窗口的项目中的文件复制到新的文件中,并得到此错误。
对我来说,采取了与Andreas Kahler相反的方法来解决:
在创build一个窗口文件并将启动uri设置为这个文件后,我将页面切换到App.xaml的'Build Action'属性的ApplicationDefinition。