Answers:
它是在构建期间生成的,但是您可以提供自己的文件(必要时在项目属性中对其进行歧义消除)。在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();
}
}
}
App.g.cs
。但是,我尝试添加到其中,Main()
并且每次重新构建项目时,它都会还原为此处的内容。试图在另一个类中创建自己的类,但是Project Properties仅找到MyProject.App,而不是另一个类,因此无法重定向它。
App.xaml.cs
在Visual Studio中打开。使用导航栏>方法下拉列表>选择Main
(灰色)。这将带您到App.g.i.cs
。
Main()方法是自动创建的。如果要提供自己的产品,则必须(在VS2013和VS2017中测试):
然后只需将Main()方法添加到App.xaml.cs。可能是这样的:
[STAThread]
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
Main()
由CLR和WPF自动提供。
C#编译器采用命令行开关/m
,该开关指定包含实现的类型Main()
。按照约定,如果未明确指定启动对象,则CLR将查找具有静态Main()
方法的任何类并将其调用。(正如@Marc Gravel在其评论中指出的那样)
对于WPF,将Main()
在App.xaml
构建时自动生成,并指定/ m开关以使C#编译器使用该类作为入口点。但是,如果您查看项目属性,则会发现有一个设置供您选择启动对象。因此,如果需要,您可以提供自己的实现的类Main()
。
请注意,这将使您有责任创建Application
实例并调用其Run()
方法以确保WPF基础结构正确启动。
/m
它并不在乎该类型是什么。如果您不明确,它只会尝试找到任何合适的Main
方法,并抱怨它找到0或多个。例如,语言规范(第1.1节)中的“ Hello World”示例Hello
用作类型名称。
main()
由CLR(运行时)提供的说法并不是很准确,实际上是由编译器生成的。
MyApp.App app = new MyApp.App();
)并对其进行调用。好决定。另外,还必须在之前添加,幸运的是,对于我们来说,原始方法仍然存在(在App.g.cs中可见,因此无需添加该方法!)。.Run()
Main()
app.InitializeComponent();
app.Run()
InitializeComponent()
我将无法在没有主窗口的另一个项目中加载的文件复制到一个新项目中,并收到此错误。
对我来说,它采取了与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>