<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

在 VS 2010 中打开并编译我的 MVC4 项目后出现以下错误。

CS1705: Assembly 'SDEM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

在我的 web.config 我有

    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

有人知道我应该如何解决这个版本问题吗?

这表明您在项目中引用的程序集的版本 (4.0.0.1) 与您在 web.config(4.0.0.0) 中的不同。

请检查 System.Web.Mvc 引用的程序集是否与 web.config 中所写的相同。

如果没有,则添加对相应程序集的引用。 右键点击 参考 -> 添加参考 -> ...

为所有引用 System.Web.Mvc dll

的项目安装 Nuget 包 Microsoft.AspNet.Mvc

示例: 安装包 Microsoft.AspNet.Mvc

解法:

不要直接从 cshtml 代码引用 Nuget 包组件。相反,编写一个适配器从具有相同签名的自定义扩展方法调用静态 HtmlHelper 扩展方法。

这种方法有两个优点:

  • 首先,它会自动抑制CS1702。
  • 其次也是最重要的是,当您更改使用的 NuGet 包时,编译器会通知您必要的 link 修复(可能仅包括更改 cs 代码开头的 using 命令),同时如果直接从 cshtml 代码使用 NuGet 组件引用,将出现 run-time 问题。

我刚刚验证了从 PagedList/PagedList.MVC 到 X.PagedList/X.PagedList.MVC.

的迁移
namespace MyMvcExtensions
{
    public static class MyHelperExtensions
    {
    ...
        public static HtmlString PagedListGoToPageForm(this HtmlHelper html, IPagedList list, string formAction)
        {
            return X.PagedList.Mvc.HtmlHelper.PagedListGoToPageForm(html, list, formAction);
        }
        public static HtmlString PagedListGoToPageForm(this HtmlHelper html, IPagedList list, string formAction, string inputFieldName)
        {
            return X.PagedList.Mvc.HtmlHelper.PagedListGoToPageForm(html, list, formAction, inputFieldName);
        }
        public static HtmlString PagedListGoToPageForm(this HtmlHelper html, IPagedList list, string formAction, X.PagedList.Mvc.Common.GoToFormRenderOptions options)
        {
            return X.PagedList.Mvc.HtmlHelper.PagedListGoToPageForm(html, list, formAction, options);
        }
        public static HtmlString PagedListPager(this System.Web.Mvc.HtmlHelper html, IPagedList list, Func<int, string> generatePageUrl)
        {
            return X.PagedList.Mvc.HtmlHelper.PagedListPager(html, list, generatePageUrl);
        }
        public static HtmlString PagedListPager(this HtmlHelper html, IPagedList list, Func<int, string> generatePageUrl, X.PagedList.Mvc.Common.PagedListRenderOptionsBase options)
        {
            return X.PagedList.Mvc.HtmlHelper.PagedListPager(html, list, generatePageUrl, options);
        }
    }
}

在你的 cshtml 代码中写 @using MyMvcExtensions 而不是 @using X.PagedList.Mvc。

如果您要迁移到假设的 Y.PagedList.MVC,编译器将提醒您必须在 MyHelperExtensions class.

中进行更改