我是一个初学者,当谈到编程,但我确信,其中一个普遍规则是,一个程序开始与主()。我没有看到一个当我创建一个 WPF 项目。Main ()在 WPF 中的命名是否有所不同?
Main()是在编译过程中生成的。您可以在 App.g.cs(在 obj/{Debug,Release}文件夹中)中找到它。
Main()
App.g.cs
obj/{Debug,Release}
它是在构建期间生成的,但是您可以提供自己的(必要时在项目属性中消除它的歧义)。在 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(); } } }
main()是应用程序的标准入口点,但所有应用程序都是这样构造的。在 XAML 项目中,App.XAML 文件指定入口点 StartupUri="MainWindow.xaml"。
main()
StartupUri="MainWindow.xaml"
正如其他人所说,实际的主函数是基于项目中 XAML 文件的内容生成的。
Main()由 CLR 和 WPF 自动提供。
C # 编译器接受一个命令行开关 /m,它指定包含 Main()实现的类型。按照约定,如果没有显式指定启动对象,CLR 将查找具有静态 Main()方法的任何类并调用它。(就像@Marc Gravel 在他的评论中指出的那样)
/m
对于 WPF,在构建 App.xaml时自动生成 Main(),并指定/m 开关使 C # 编译器使用该类作为入口点。但是,如果查看项目属性,您会发现有一个设置供您选择启动对象。因此,如果需要,可以提供自己的实现 Main()的类。
App.xaml
请注意,这将使您负责创建 Application实例并调用其 Run()方法,以确保 WPF 基础设施正确启动。
Application
Run()
Main ()方法是自动创建的。 如果你想提供你自己的,你必须(在 VS2013,VS2017和 VS2019测试) :
然后只需向 App.xaml.cs 添加一个 Main ()方法:
[STAThread] public static void Main() { var application = new App(); application.InitializeComponent(); application.Run(); }
我复制了一些文件,这些文件无法在另一个没有主窗口的项目中加载到一个新的项目中,然后得到了这个错误。
对我来说,我采取了与安德烈亚斯•卡勒(Andreas Kahler)截然相反的方法来解决这个问题:
创建一个窗口文件并将启动 uri 设置为该文件后,我将 Page 切换到 App.xaml“ Build Action”属性的 ApplicationDefinition。
如果您删除了默认的 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>