将PRISM 6与UWP一起使用时应用程序崩溃

本文关键字:应用程序 崩溃 一起 PRISM UWP | 更新日期: 2023-09-27 18:26:13

我在一个新的UWP项目中引用了以下库。

  • 棱镜
  • 棱镜单元Windows
  • 棱镜窗口

在用PrismUnityApplication替换应用程序类的基类后,我在代码中设置了一个异常

            var resourceLoader = ResourceLoader.GetForCurrentView(Constants.InfrastructureResourceMapId);

在以下方法中

  public void RegisterFrame(IFrameFacade frame, String sessionStateKey)

在类中

 public class SessionStateService : ISessionStateService

错误消息为:ResourceMap未找到。

我是否错过了

将PRISM 6与UWP一起使用时应用程序崩溃

的某个步骤

我想你在设置中做错了什么,因为我无法用稳定版和预发布版软件包重现错误。正如Prism的自述页面上所述,您应该只安装Prism.Unity软件包,其余软件包将相应地插入。

请注意,将特定于容器的包添加到您的项目中,还将引入正确的特定于平台的包和核心PCL库。例如,当你想在WPF项目中使用Unity时,添加Prism.Unity包,其他包也会被引入。

这确实会引入你提到的参考,但只有Prism.Unity包作为项目参考被添加。你的project.json文件应该是这样的(根据使用稳定版或预发布版,你当然会有不同的版本):

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
    "Prism.Unity": "6.2.0-pre1"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

下一步实际上是在C#和XAML文件中用PrismUnityApplication替换基类。从App类中删除除构造函数和OnLaunchApplicationAsync方法之外的所有内容:

sealed partial class App : PrismUnityApplication
{
    public App()
    {
        this.InitializeComponent();
    }
    protected override Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args)
    {
        NavigationService.Navigate("Main", null);
        return Task.FromResult<object>(null);
    }
}

现在运行应用程序,会出现此错误,因为MainPage文件尚未移动。

中发生类型为"System.ArgumentException"的异常Prism.Windows.dll,但未在用户代码中处理

附加信息:页面名称Main没有关联在命名空间App2.视图中键入

在Views文件夹下添加一个新的空白页,一切都会正常运行。请按照上述步骤仔细重试。

您可以在https://github.com/PrismLibrary/Prism-Samples-Windows

Bart,我认为arshadbadarkhan也遇到了同样的问题。

arshadbadarkhan,如果你和我们一样,你正试图在AdventureWorks参考实现后为你的新Prism6应用程序建模。我们通过从AW添加一个容易被忽视的文件夹和文件来解决这个运行时问题。当我们复制这个文件时:

''Prism Samples Windows master ''Prism Samples Windows master''AdventureWorks.Shopper''Adventure Works.Shoper''Strings''en-US''Resources.resw

到我们新产品的主要应用程序项目中的Strings/en-US文件夹,我们避免了ResourceMap未找到错误。现在我们可以利用AW使用的任何默认字符串,并且我们有一个存储库来在将来添加我们自己的字符串。