WPF 中没有 Main() ?

我是一个初学者,当谈到编程,但我确信,其中一个普遍规则是,一个程序开始与主()。我没有看到一个当我创建一个 WPF 项目。Main ()在 WPF 中的命名是否有所不同?

87411 次浏览

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

它是在构建期间生成的,但是您可以提供自己的(必要时在项目属性中消除它的歧义)。在 obj/debug 中查找一个应用程序文件; 我有(由“ 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();
}
}
}

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

正如其他人所说,实际的主函数是基于项目中 XAML 文件的内容生成的。

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

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

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

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

Main ()方法是自动创建的。 如果你想提供你自己的,你必须(在 VS2013,VS2017和 VS2019测试) :

  • 在解决方案资源管理器中右键单击 App.xaml,选择 Properties
  • 将“ Build Action”更改为“ Page”(初始值为“ ApplicationDefinition”)

然后只需向 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>