【问题标题】:Installing Unity.Mvc4, but cannot get correct version of Microsoft.Practices.Unity安装 Unity.Mvc4,但无法获得正确版本的 Microsoft.Practices.Unity
【发布时间】:2014-02-06 17:00:11
【问题描述】:

我正在尝试安装 Unity.Mvc4,但收到此错误消息;

无法加载文件或程序集“Microsoft.Practices.Unity, Version=2.1.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

我拥有的 Microsoft.Practices.Unity 版本是 3.0.0.0。为什么我想要旧版本?

【问题讨论】:

标签: asp.net-mvc unity-container nuget


【解决方案1】:

Unity.Mvc4 是一个社区项目,它引用了旧版本的 Unity。如果您想使用 Unity.Mvc4,您可以从包管理器控制台获取旧版本的 Unity,您应该使用以下内容(有关更多信息,请参阅此 post

Install-Package Microsoft.Practices.Unity -Version <press tab key for autocomplete>

根据个人经验:如果您想要或需要使用较新版本的 Unity(在版本 3 中对 MVC 和 Web API 有很好的支持),您应该尝试摆脱 Unity.Mvc4 或 Unity.WebApi 等软件包。它们对于旧项目很有用(Unity 3 不是一个选择),但对于新项目,Unity 可以满足您通常需要的一切。

【讨论】:

  • 我发现当我通过 Nuget 卸载 Unity,然后安装新版本的 Unity 时,我仍然会收到引用版本 2.1.505.0 的运行时错误但是当我在我的应用程序中进行全局搜索时,那个版本号根本不存在。所以我不知道这个版本是如何被引用的。
  • 您必须卸载引导程序,这意味着对 Unity.Mvc4 和/或 Unity.WebApi 的引用。卸载 NuGet 包的提示:您应该删除相应的 DLL 并删除 packages.config 文件中的相应行,而不是通过 Manage NuGet Packages 窗口卸载它。到目前为止我的经验是,通过窗口卸载时,依赖项也被删除,无论其他包是否需要它们。
【解决方案2】:

我在使用 Unity 3 时遇到了类似的问题。我没有安装另一个版本的 unity,我只是更改了 web.config 中的程序集绑定:

     <dependentAssembly>
    <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.5.0.0"/>
  </dependentAssembly>

【讨论】:

  • 我将 更改为 它就像一个魅力!谢谢。
猜你喜欢
  • 2021-09-11
  • 2012-04-18
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多