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

时间:2015-09-30 20:39:26

标签: 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);

当然,我没有引用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>

然而,这似乎不起作用。

有什么建议吗?

8 个答案:

答案 0 :(得分:20)

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

  

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

通过Package Manager Console或NuGet:

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

代码:

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

答案 1 :(得分:11)

嗯,现在这可能是多余的了,但这个问题显然与Unity 3.5.1406有关,因为它已被拆除,并被Unity 4.0取代。我还更换了旧的,显然不受支持的Unity.WebApi库,该库几年没有更新,并用更新的,显然支持的Unity.AspNet.WebApi库取而代之。这在NuGet中有点棘手,因为它可以搜索Unity WebApi&#34;返回列表顶部的旧库,并将较新的库隐藏在第一页底部。

在所有这些之间,它现在有效,没有任何我发现的问题。

答案 2 :(得分:7)

我在运行全局update-package时点击此内容。

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

答案 3 :(得分:5)

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

答案 4 :(得分:3)

今天早上我遇到了同样的问题,最终卸载了Unity的v4.0以及Unity.WebAPI。安装了Unity的v3.5.1405-prelease,然后重新安装了Unity.WebAPI。

答案 5 :(得分:3)

程序集重定向无法正常工作的原因可能是Microsoft.Practices.Unity PublicKeyToken中的更改。我在Unity.3.5.1404.0和Unity.4.0.0之间看到,PublicKeyToken从 31bf3856ad364e35 更改为 6d32ff45e0ccc69f 。也许它已经改为3.5.1406了?请参阅:https://github.com/unitycontainer/unity/issues/15

答案 6 :(得分:2)

我刚刚追踪了2013年4月Unity 3的Unity Container的最新版本,并将其添加到我的参考资料中。这是一个PDF on my Google Drive的链接,详细说明了我采取的所有步骤。

答案 7 :(得分:-1)

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

答案 - 仅针对此错误打开 - >打包管理器控制台并输入

PM&GT;更新包