【问题标题】:The type 'IUnityContainer' is defined in an assembly that is not referenced'IUnityContainer' 类型是在未引用的程序集中定义的
【发布时间】:2015-09-30 20:39:26
【问题描述】:

我刚刚将我的 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>

但是,这似乎不起作用。

有什么建议吗?

【问题讨论】:

    标签: c# asp.net unity-container


    【解决方案1】:

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

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

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

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

    代码:

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

    【讨论】:

    • 这对我有帮助。谢谢。
    • @Rob Koch 你拯救了我的一天 :) 非常感谢
    【解决方案2】:

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

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

    【讨论】:

    【解决方案3】:

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

    通过install-package Unity -version 3.5.1404回滚Unity版本解决了这个问题。

    【讨论】:

    • 经过一番努力,我得到了确切的修复,感谢 user326608
    【解决方案4】:

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

    【讨论】:

    • 你说得对,应该已经解决了。但它似乎没有。我使用的是旧的(已弃用?)Unity.WebApi 项目,而不是较新的 Unity.AspNet.WebApi 项目。但即使更新到正确的项目后,我仍然会收到错误消息。或类似的:现在它抱怨它需要版本 3.5.0.0。在 Microsoft.Practices.Unity.Mvc 程序集中引用类的行上,我也遇到了同样的错误。
    • Unity.WebApi 是一个开源项目,它允许 Unity IOC 与 MVC 项目集成。但是,它似乎自 2013 年以来没有更新,所以我可能会不再使用它。对于我的项目,我将 Microsoft 的 Unity/Unity.MVC 与 Unity.AspNet.WebApi 结合使用。安装这些我似乎没有任何问题。
    • 可能是包管理器/依赖顺序安装问题吗?也许尝试在测试应用程序上进行全新安装?
    【解决方案5】:

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

    【讨论】:

    • 哇。 Unity 3.5.1406 似乎已从 Nuget 中删除。有趣的。我只看到 3.5.1405-prelease 和 4.0。有趣的。我会用各种 4.x 风格再试一次(各种相关的包现在都更新到那个版本),看看会发生什么。
    • 和我的一个网络项目一样,我最终也撤消了更新,等到 MS 醒来。
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 欢迎来到 Stack Overflow!请始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。谢谢!
      【解决方案8】:

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

      ANSWER-仅针对此错误只需 OPEN->Package Manager Console 并键入

      PM> 更新包

      【讨论】:

      • 不要不要这样做。这是一个非常糟糕的主意。它会将解决方案中每个项目中的每个 nuget 包更新到最新版本。对于大型复杂的解决方案,您不能只更新每个 nuget 包。无论如何都要安排几天(几周?)的测试时间。
      猜你喜欢
      • 2016-09-04
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多