Windows应用商店App 8.1崩溃。 PRISM

时间:2014-01-19 19:23:46

标签: c# windows-store-apps

我正在使用" PRISM for Windows运行时8.1"创建一个新项目。每当我试图点击设置魅力时,应用程序崩溃。但是从8.0创建一个新项目不会导致应用程序崩溃。有谁知道如何解决这个问题?

我得到的错误是

  

Message =" System.NullReferenceException:未设置对象引用   一个对象的实例。\ r \ n at   Microsoft.Practices.Prism.StoreApps.MvvmAppBase.OnCommandsRequested(SettingsPane   sender,SettingsPaneCommandsRequestedEventArgs args)"

编辑:这是一个在崩溃时自动生成的文件。

namespace TestApp
{
#if !DISABLE_XAML_GENERATED_MAIN
    public static class Program
    {
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        static void Main(string[] args)
        {
            global::Windows.UI.Xaml.Application.Start((p) => new App());
        }
    }
#endif

    partial class App : global::Microsoft.Practices.Prism.StoreApps.MvvmAppBase
    {
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")]
        private bool _contentLoaded;

        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public void InitializeComponent()
        {
            if (_contentLoaded)
                return;

            _contentLoaded = true;
#if DEBUG && !DISABLE_XAML_GENERATED_BINDING_DEBUG_OUTPUT
            DebugSettings.BindingFailed += (sender, args) =>
            {
                global::System.Diagnostics.Debug.WriteLine(args.Message);
            };
#endif
#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
            UnhandledException += (sender, e) =>
            {
                if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break(); <---- the debugger stays on this line.
            };
#endif
        }
    }
}

2 个答案:

答案 0 :(得分:1)

从项目站点下载开源项目。然后在VS中选择将现有项目添加到您的解决方案中并为win rt添加Prism。现在您可以编辑并修复错误。 在MvvmAppBase.cs中,第284行在这里添加一个空检查。

private void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
{
    if (args == null || args.Request == null || args.Request.ApplicationCommands == null)
    {
        return;
    }

    var applicationCommands = args.Request.ApplicationCommands;
    var settingsCommands = GetSettingsCommands();
    if (settingsCommands == null) { return; }
    foreach (var settingsCommand in settingsCommands)
    {
        applicationCommands.Add(settingsCommand);
    }
}

答案 1 :(得分:1)

正如ClevelandBuckeye指出的那样,Prism代码中确实存在一个错误,当没有配置任何设置时它就无法处理。

您不必修改其源代码,只需覆盖App类中的GetSettingsCommands,并返回一个空的命令列表,如下所示:

protected override IList<SettingsCommand> GetSettingsCommands()
{
    return new List<SettingsCommand>();
}

如果您想看一个如何完全实现它的示例,请查看AdventureWorks参考实现here