Prism 7.1升级缺少参考问题

时间:2019-02-11 06:58:35

标签: prism

最近想将我的WPF Prism应用程序迁移到7.1,这样做时,我遇到了与Unity.Abstractions有关的引用错误。

将Prism nuget软件包升级到Prism7.1,如下面的packages.config中所示:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="CommonServiceLocator" version="2.0.4" targetFramework="net472" />
  <package id="Prism.Core" version="7.1.0.431" targetFramework="net472" />
  <package id="Prism.Unity" version="7.1.0.431" targetFramework="net472" />
  <package id="Prism.Wpf" version="7.1.0.431" targetFramework="net472" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net472" />
  <package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
  <package id="Unity.Abstractions" version="4.0.3" targetFramework="net472" />
  <package id="Unity.Container" version="5.9.4" targetFramework="net472" />
</packages>

App.xaml代码如下:

<prism:PrismApplication x:Class="WPFPrismDemoApp.App"
                x:ClassModifier="internal" 
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:prism="http://prismlibrary.com/">
    <Application.Resources>
    </Application.Resources>
</prism:PrismApplication>

App.xaml.cs代码如下:

 public partial class App : PrismApplication
    {
        protected override Window CreateShell()
        {
            return null;
        }

        protected override void InitializeShell(Window shell)
        {
            base.InitializeShell(shell);
            Application.Current.MainWindow = shell;
            var container= Container.GetContainer();
        }

当我尝试通过Container.GetContainer访问统一容器时,遇到以下异常: 类型“ IUnityContainer”在未引用的程序集中定义。您必须添加对程序集“ Unity.Abstractions,版本3.3.1.0”的引用。 我不知道何时将WPF.Unity nuget软件包升级到最新版本,它将自动将Unity.Abstractions升级到4.0.3.0。

任何知道如何通过它的人。

2 个答案:

答案 0 :(得分:3)

程序包Unity.Container版本5.8.x引用Unity.Abstractions版本3.3.1,而较新版本引用版本4.0.3。这破坏了与Prism中的Bootstrapper的向后兼容性。如果要使用较新的版本,则需要使用新的PrismAplication类。有点伤心。

答案 1 :(得分:2)

尝试将Unity降级到5.8.x版本。 我认为5.9.x版具有一组不同的DLL。