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

The type 'IUnityContainer' is defined in an assembly that is not referenced

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

Error CS0012 The type 'IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly '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>

然而,这似乎不起作用。

有什么建议吗?

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

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

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

除此之外,它现在可以正常工作,没有我发现的任何问题。

我在 运行 全局 update-package 时点击了这个。

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

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

ANSWER-Only 对于此错误,只需打开 -> 程序包管理器控制台并键入

下午> update-package

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

The type 'IUnityContainer' is defined in an assembly that is not referenced. You must add a reference to assembly 'Microsoft.Practices.Unity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

通过包管理器控制台或 NuGet:

  • 卸载Unity.Mvc4
  • 卸载Unity.WebAPI
  • Update-Package团结
  • Install-Package Unity.Mvc(注意:这次包名没有数字)
  • Install-Package Unity.AspNet.WebApi

代码:

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

程序集重定向不起作用的一个原因可能是 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

我刚刚找到了 Unity Container 的最新版本,即 2013 年 4 月发布的 Unity 3,并将其添加到我的参考资料中。