使用Prism创建通用Windows应用程序时,我总是在运行应用程序时收到错误(或者,有时候,在退出正在运行的应用程序时)。以下是重现问题的步骤:
代码:
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)
我的设置不正确吗?
答案 0 :(得分:1)
问题是Visual Studio 2015中的默认UWP模板仍附带"Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0"
,而版本应为5.2.2。
所以只需将该软件包更新到5.2.2,一切都应该有效。
您的代码的小旁注:
因此您的代码可以缩减为
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;,但我似乎能够运行应用程序而不再接收该异常。