WPF中没有Main()?

问题描述 投票:108回答:7

在编程时我是初学者,但我确信其中一个通用规则是程序以Main()开头。我在创建WPF项目时没有看到一个。 Main()只是在WPF中以不同的方式命名?

c# wpf c#-4.0 main
7个回答
69
投票

它是在构建期间生成的,但您可以自己提供(根据需要在项目属性中消除歧义)。在obj / debug中查找app文件;我(由“C#2010 Express”提供)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();
        }
    }
}

105
投票

Main()方法是自动创建的。如果您想提供自己的(在VS2013和VS2017中测试):

  • 右键单击解决方案资源管理器中的App.xaml,选择“属性”
  • 将“构建操作”更改为“页面”(初始值为“ApplicationDefinition”)

然后只需向App.xaml.cs添加一个Main()方法。它可能是这样的:

[STAThread]
public static void Main()
{
    var application = new App();
    application.InitializeComponent();
    application.Run();
}

13
投票

Main()由CLR和WPF自动提供。

C#编译器采用命令行开关/m,它指定包含Main()实现的类型。按照惯例,如果没有显式指定启动对象,CLR将查找具有静态Main()方法并将调用它的任何类。 (正如@Marc Gravel在评论中指出的那样)

对于WPF,在构建Main()时会自动生成App.xaml,并指定/ m开关使C#编译器将该类用作入口点。但是,如果您查看项目属性,您会发现有一个设置供您选择启动对象。因此,如果您愿意,您可以提供自己的类来实现Main()

请注意,这将使您负责创建Application实例并调用其Run()方法以确保正确启动WPF基础结构。


6
投票

Main()是在编译期间生成的。你可以在App.g.cs(在obj/{Debug,Release}文件夹中)找到它。


6
投票

main()是应用程序的标准入口点,但所有应用程序都是以这种方式构建的。在XAML项目中,App.XAML文件指定了StartupUri="MainWindow.xaml"的入口点。

正如其他人所说,实际的主要功能是根据项目中XAML文件的内容生成的。


0
投票

我将没有主窗口的另一个项目中没有加载的文件复制到一个新文件中并得到了这个错误。

对我而言,安德烈亚斯·卡勒采取了相反的方法来修复:

在创建一个窗口文件并将启动uri设置为此文件后,我将Page切换到Application.xaml'Build Action'属性的ApplicationDefinition。


0
投票

如果您删除了默认的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>
© www.soinside.com 2019 - 2024. All rights reserved.