最近想将我的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。
任何知道如何通过它的人。
答案 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。