C# “完全删除”;附录xaml“;并创造了自己的切入点,其后果是什么?

C# “完全删除”;附录xaml“;并创造了自己的切入点,其后果是什么?,c#,wpf,xaml,C#,Wpf,Xaml,我刚刚从我的解决方案中完全删除了“App.xaml”,并创建了自己的xamlless入口类,在这里我实现了传统的静态Main()方法 我正在实例化一个新的应用程序类,并在调用它的Run()方法之前对其进行设置,给它一个StartupUri,同时向它添加一个新的资源字典,以便自动应用我的样式。一切按预期运行,主窗口显示,资源加载,模板正确应用于所有控件和窗口 但我需要知道这样做是否会带来不良后果?那个App类为我提供了什么,所以我应该保留它,而不是用我自己的简洁、无xamlless的入门点来代替它

我刚刚从我的解决方案中完全删除了“App.xaml”,并创建了自己的xamlless入口类,在这里我实现了传统的静态
Main()
方法

我正在实例化一个新的
应用程序
类,并在调用它的
Run()
方法之前对其进行设置,给它一个
StartupUri
,同时向它添加一个新的资源字典,以便自动应用我的样式。一切按预期运行,主窗口显示,资源加载,模板正确应用于所有控件和窗口

但我需要知道这样做是否会带来不良后果?那个
App
类为我提供了什么,所以我应该保留它,而不是用我自己的简洁、无xamlless的入门点来代替它,它给了我同样的准确结果

public static class Entry
{
    private static readonly Application _application = new Application();
    [STAThread]
    public static void Main()
    {
        _application.StartupUri = new Uri( "/Eurocentric;component/Interface/MainWindow.xaml" , UriKind.Relative );
        var style = new ResourceDictionary
                    {
                    Source = new Uri( "/Eurocentric;component/Interface/Styles/VictorianStyle.xaml", UriKind.Relative )
                    };
        _application.Resources.MergedDictionaries.Add( style );
        TemplatedWindow.Defaults();
        _application.Run();
    }
}

查看反编译器中的
App
类,可以发现
App
类中自动生成的方法:

/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public static void Main() {
    RootNamespace.App app = new RootNamespace.App();
    app.InitializeComponent();
    app.Run();
}
//
///应用程序入口点。
/// 
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute(“PresentationBuildTasks”,“4.0.0.0”)]
公共静态void Main(){
RootNamespace.App App=新的RootNamespace.App();
app.InitializeComponent();
app.Run();
}
所以,我想说,在运行时发生的事情没有区别。但是,它影响了我们的开发经验

我自己也使用过手动方法,我看到的一个缺点是ReSharper无法获取应用程序范围的资源,因此它们在XAML代码完成时不可用,因此会出现大量警告。为了缓解这个问题,我不得不在项目中添加一个假的App.xaml文件。ReSharper通过
ApplicationDefinition
build操作专门搜索.xaml文件,因此可以保持入口点不同,以满足ReSharper和使用自定义入口点的需要


另一件事,您可以在这里看到,与其他.xaml文件不同的是,
InitializeComponent
方法是单独调用的,而不是在重写的构造函数中调用的。因此,如果您决定在自定义入口点中使用支持XAML的应用程序类,您也需要单独调用此方法,或者添加一个构造函数重写来执行此操作,因为它不是默认创建的。

反问题:这样做有什么好处?所有这些都在MSDN页面的备注部分进行了解释,特别是在
中注意:独立应用程序不需要应用程序对象;可以实现一个自定义静态入口点方法(Main),该方法在不创建应用程序实例的情况下打开一个窗口。但是,XAML浏览器应用程序(XBAP)需要一个应用程序对象。
@Clemens没有列出这样做的负面影响(如果有的话),但它回答了您的第二个问题,“那个应用程序类为我提供了什么,所以我应该保留它,而不是用我自己的紧凑且无xamlless的入口点来代替它,从而获得相同的准确结果?”。如果有任何负面影响(除了XBAP需要一个应用程序对象之外),我很确定它们也会列在那里。在幕后,app.xaml正以任何方式做着你所做的事情。这就是app.xaml的属性是应用程序定义的原因。这两种情况都没有区别。