将Prism.unity 6.2.0添加到Windows 10 UWP后,应用程序抛出异常

时间:2016-10-07 22:11:03

标签: c# mvvm prism

使用Prism创建通用Windows应用程序时,我总是在运行应用程序时收到错误(或者,有时候,在退出正在运行的应用程序时)。以下是重现问题的步骤:

  • 使用Visual Studio 2015创建新的UWP应用程序。
  • 使用NuGet安装Prism(Install-Package Prism.unity)
  • 将App类更改为继承PrismUnityApplication(下面的代码)
  • 创建一个名为Views的文件夹并添加一个名为MainPage的新页面,确保它位于正确的命名空间中

代码:

using Microsoft.Practices.Unity;
using Prism.Events;
using Prism.Mvvm;
using Prism.Unity.Windows;
using Prism.Windows.AppModel;
using Prism.Windows.Navigation;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Threading.Tasks;
using Windows.ApplicationModel.Activation;
using Windows.ApplicationModel.Resources;
using Windows.System;
using Windows.UI.Notifications;
using Windows.UI.Xaml;

namespace TestAppForPrism {
/// <summary>
/// Provides application-specific behavior to supplement the default Application class.
/// </summary>
sealed partial class App : PrismUnityApplication {

    public App() {
        this.InitializeComponent();
    }

    protected override Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args) {
        NavigationService.Navigate("Main", null);
        return Task.FromResult<object>(null);
    }

    protected override Task OnInitializeAsync(IActivatedEventArgs args) {
        Container.RegisterInstance<INavigationService>(NavigationService);

        return base.OnInitializeAsync(args);
    }
}
}

当我运行应用程序时,会抛出异常:

  

无法加载文件或程序集'System.Runtime.Serialization.Xml,Version = 4.1.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

我的设置不正确吗?

2 个答案:

答案 0 :(得分:1)

问题是Visual Studio 2015中的默认UWP模板仍附带"Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0",而版本应为5.2.2。

所以只需将该软件包更新到5.2.2,一切都应该有效。

您的代码的小旁注:

  • 如果您不必执行任务,请返回Task.CompletedTask。这是在.NET 4.6中添加的。它的性能更高一些。
  • 没有必要在容器中注册INavigationService,这已经在基类中完成了。

因此您的代码可以缩减为

sealed partial class App : PrismUnityApplication
{

    public App()
    {
        this.InitializeComponent();
    }

    protected override Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args)
    {
        NavigationService.Navigate("Main", null);
        return Task.CompletedTask;
    }
}

答案 1 :(得分:0)

玩了一会儿之后,我想我找到了一个解决方案:

在NuGet控制台中,我运行了&#34; update-package -reinstall&#34;,然后重建了解决方案。我仍然在错误窗口中发出警告,说明&#34;发现无法解析的相同从属程序集的不同版本之间的冲突。当日志详细程度设置为详细信息时,这些引用冲突会在构建日志中列出。&#34;,但我似乎能够运行应用程序而不再接收该异常。