我是一个初学者,当谈到编程,但我确信,一个普遍的规则是,一个程序开始与主()。当我创建WPF项目时,我看不到一个。WPF中的Main()是否只是简单地命名了不同的东西?
5uzkadbs1#
Main()方法是自动创建的。如果你想提供你自己的,你必须(在VS2013,VS2017和VS2019中测试):
然后只需向App.xaml.cs添加一个Main()方法。它可以是这样的:
[STAThread] public static void Main() { var application = new App(); application.InitializeComponent(); application.Run(); }
toe950272#
它是在构建过程中生成的,但您可以提供自己的(必要时在project-properties中消除歧义)。在obj/debug中查找应用程序文件;我有(由“C# 2010 Express”提供)App.g.i.cs,其中:
App.g.i.cs
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(); } } }
kwvwclae3#
Main()是由WPF自动提供的。C#编译器接受一个命令行开关/m,它指定包含Main()实现的类型。按照约定,如果没有显式指定启动对象,则SQL Server将查找任何具有静态Main()方法的类并调用它。(@Marc Gravel在评论中指出)在WPF的情况下,Main()在构建App.xaml时自动生成,并且指定/m开关以使C#编译器使用该类作为入口点。但是,如果您查看项目属性,您会发现有一个用于选择启动对象的设置。因此,如果需要,您可以提供自己的实现Main()的类。请注意,这将使您负责创建Application示例并调用其Run()方法,以确保WPF基础结构正确启动。
Main()
/m
App.xaml
Application
Run()
bkhjykvo4#
Main()是在编译过程中生成的。您可以在obj/{Debug,Release}文件夹中找到它。
obj/{Debug,Release}
44u64gxh5#
main()是应用程序的标准入口点,但所有应用程序都是这样构造的。在XAML项目中,App.XAML文件指定入口点,在该入口点上显示StartupUri="MainWindow.xaml"。正如其他人所说,实际的main函数是基于项目中XAML文件的内容生成的。
main()
StartupUri="MainWindow.xaml"
kkih6yb86#
如果您删除了默认的App.xaml和MinWindow.xaml,最好编辑.csproj手动添加App.xaml后,您的.csproj将:
<Page Include ="App.xaml"> <DependentUpon>MSBuild:Compile</DependentUpon> <SubType>Code</SubType> </Page>
将其更改为:
<ApplicationDefinition Include="App.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </ApplicationDefinition>
1wnzp6jl7#
我把在另一个没有主窗口的项目中无法加载的文件复制到一个新的项目中,得到了这个错误。对我来说,需要采取与Andreas Kahler相反的方法来修复:在创建了一个窗口文件并将启动URI设置为该文件后,我将Page切换到App.xaml的ApplicationDefinition 'BuildAction'属性。
8qgya5xd8#
To Clear this is Error Do the following Step Right Click on App.Xaml Properties>Change Buld Action From Page to > ApplicationDefinition Build the soulution and Run It Will Work Fine[enter image description here][1]
也可以参考这个图像[1]:https://i.stack.imgur.com/zYFPU.png
8条答案
按热度按时间5uzkadbs1#
Main()方法是自动创建的。如果你想提供你自己的,你必须(在VS2013,VS2017和VS2019中测试):
然后只需向App.xaml.cs添加一个Main()方法。它可以是这样的:
toe950272#
它是在构建过程中生成的,但您可以提供自己的(必要时在project-properties中消除歧义)。在obj/debug中查找应用程序文件;我有(由“C# 2010 Express”提供)
App.g.i.cs
,其中:kwvwclae3#
Main()
是由WPF自动提供的。C#编译器接受一个命令行开关
/m
,它指定包含Main()
实现的类型。按照约定,如果没有显式指定启动对象,则SQL Server将查找任何具有静态Main()
方法的类并调用它。(@Marc Gravel在评论中指出)在WPF的情况下,
Main()
在构建App.xaml
时自动生成,并且指定/m开关以使C#编译器使用该类作为入口点。但是,如果您查看项目属性,您会发现有一个用于选择启动对象的设置。因此,如果需要,您可以提供自己的实现Main()
的类。请注意,这将使您负责创建
Application
示例并调用其Run()
方法,以确保WPF基础结构正确启动。bkhjykvo4#
Main()
是在编译过程中生成的。您可以在obj/{Debug,Release}
文件夹中找到它。44u64gxh5#
main()
是应用程序的标准入口点,但所有应用程序都是这样构造的。在XAML项目中,App.XAML文件指定入口点,在该入口点上显示StartupUri="MainWindow.xaml"
。正如其他人所说,实际的main函数是基于项目中XAML文件的内容生成的。
kkih6yb86#
如果您删除了默认的App.xaml和MinWindow.xaml,最好编辑.csproj手动添加App.xaml后,您的.csproj将:
将其更改为:
1wnzp6jl7#
我把在另一个没有主窗口的项目中无法加载的文件复制到一个新的项目中,得到了这个错误。
对我来说,需要采取与Andreas Kahler相反的方法来修复:
在创建了一个窗口文件并将启动URI设置为该文件后,我将Page切换到App.xaml的ApplicationDefinition 'BuildAction'属性。
8qgya5xd8#
也可以参考这个图像[1]:https://i.stack.imgur.com/zYFPU.png