WPF中没有Main()?

时间:2010-04-22 21:32:41

标签: c# wpf c#-4.0 main

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

7 个答案:

答案 0 :(得分:105)

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

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

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

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

答案 1 :(得分: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();
        }
    }
}

答案 2 :(得分:13)

CLR和WPF自动提供

Main()

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

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

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

答案 3 :(得分:6)

编译期间生成

Main()。您可以在App.g.csobj/{Debug,Release}文件夹中)找到它。

答案 4 :(得分:6)

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

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

答案 5 :(得分:0)

我将无法加载到另一个没有主窗口的项目中的文件复制到一个新文件中并出现此错误。

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

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

答案 6 :(得分:0)

如果您删除了默认的App.xaml和MinWindow.xaml,最好编辑.csproj 手动添加App.xaml后,您的.csproj将为:

@types/nightmare

将此更改为:

<Page Include ="App.xaml">
       <DependentUpon>MSBuild:Compile</DependentUpon>
       <SubType>Code</SubType>
</Page>