我正在使用" 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
}
}
}
答案 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。