类型"IUnityContainer"在未引用的程序集中定义

Ken*_*ith 22 c# asp.net unity-container

我刚刚将我的ASP.NET MVC/WebApi项目从Microsoft.Practices.Unity 3.5.1404升级到3.5.1406(通过nuget,刚刚发布).之后,我收到了这个编译错误:

错误CS0012类型"IUnityContainer"在未引用的程序集中定义.您必须添加对程序集"Microsoft.Practices.Unity,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"的引用.

在如下的行上:

GlobalConfiguration.Configuration.DependencyResolver = 
    new Unity.WebApi.UnityDependencyResolver(container);
Run Code Online (Sandbox Code Playgroud)

当然,我没有引用3.0.0.0,而是3.5.1.0.所以我的假设是Unity.WebApi程序集已针对程序集的早期版本进行编译Microsoft.Practices.Unity.从理论上讲,您需要使用程序集重定向来修复它,如下所示:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.5.1.0" newVersion="3.5.1.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用.

有什么建议?

Rob*_*och 23

对于如何从Unity 3.5.1升级到4.0.1,这可能是一个更新的答案.

类型"IUnityContainer"在未引用的程序集中定义.您必须添加对程序集"Microsoft.Practices.Unity,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"的引用.

通过Package Manager Console或NuGet:

  • 卸载Unity.Mvc4
  • 卸载Unity.WebAPI
  • 更新包Unity
  • 安装包Unity.Mvc(注意:这次包名中没有数字)
  • 安装包Unity.AspNet.WebApi

码:

  • 复制的container.RegisterTypes从Bootstrapper.cs到App_Start/UnityConfig.cs
  • 从项目中排除Bootstrapper.cs
  • 构建并运行


Ken*_*ith 12

好吧,现在这可能是多余的,但问题显然与Unity 3.5.1406有关,因为它已被拆除,并被Unity 4.0取代.我还替换了几年前未更新的较旧的,显然不受支持的Unity.WebApi库,并将其替换为较新的,显然支持的Unity.AspNet.WebApi库.这在NuGet中有点棘手,因为搜索"Unity WebApi"会返回列表顶部的旧库,并将较新的库隐藏在第一页底部.

在所有这一切之间,它现在有效,没有发现任何问题.


use*_*608 7

我在运行全局时遇到了这个问题update-package.

通过install-package Unity -version 3.5.1404解决它回滚Unity版本.


Lei*_*son 6

您需要确保还升级到Unity.AspNet.WebApi版本3.5.1406,而不仅仅是Unity.如果这样做,错误应该消失.