38

我有一个 ASP.NET MVC4 项目,它在 VS2010 中编译得很好。出于部署目的,我运行了一个 Nant 脚本,该脚本尝试使用 aspnet_compiler.exe 预编译网站,但我一直遇到 System.Web.WebPage 的程序集引用问题

错误 CS1705:程序集 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 使用 'System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'比引用的程序集'System.Web.WebPages,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'更高的版本

我的 web.config 中还有以下程序集绑定:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

我的 csproj 有以下参考:

<Reference Include="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <Private>True</Private>
 <HintPath>..\packages\AspNetWebPages.Core.2.0.20126.16343\lib\net40\System.Web.WebPages.dll</HintPath>
</Reference>
4

11 回答 11

40

我通过显式引用 Web.config 中的 2.0 程序集解决了这个问题。我想由于某种原因,ASP.NET 编译器(在我的情况下运行时MvcBuildViews)首先使用旧的 1.0 程序集(如果找到的话)。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- … -->
  <system.web>
    <!-- … -->
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      </assemblies>
    </compilation>
    <!-- … -->
  </system.web>
  <!-- … -->
</configuration>

顺便说一句:在我添加第 3 方 ASP.NET MVC 3.0 组件后,这个问题似乎第一次出现。该组件通过程序集绑定工作正常,但这可能是 ASP.NET 编译器首先尝试加载 1.0 网页的原因。

于 2012-05-03T12:08:47.813 回答
8

我们有类似的问题。

我们现在使用 Visual Studio 2012 进行开发,当我们将 2010 项目转换为 2012 并尝试部署它时,ASP.NET 需要 2.0.0.0 而不是 1.0.0.0。

经过一番调查,我发现该项目没有引用特定版本的 System.Web.WebPages,因此在升级到 VS 2012 后,它找到了 2.0.0.0 版本。

如果您从项目中删除引用,然后从 GAC 重新添加特定版本,则它可以正常工作。

于 2012-09-11T09:27:10.440 回答
3

_bin_deployableAssemblies对我们来说,问题是文件夹中相关 DLL 的旧副本。删除它使我们正确配置了 2.0 版本。

于 2012-09-24T22:30:16.083 回答
2

MvcBuildViews当设置为 true时,我也会出现此错误。

我注意到在使用“构建解决方案”构建整个解决方案时,我总是会收到此错误。此时,如果我立即自行构建 MVC 项目(右键单击项目然后构建),则 MVC 项目将构建成功。

似乎只要不触发对其依赖项目的构建(即它们是最新的),自行构建 MVC 项目就会成功。但是使用“构建解决方案”构建总是会因为这个错误而失败。

于 2012-07-10T04:10:29.497 回答
2

我在将站点从 MVC 3 升级到 5.2.3.0 时遇到了这个问题。

我的问题是 TFS 没有从 nuget 安装中添加包和关联的 DLL。

我在解决方案的包文件夹中手动添加了以下文件夹。

Microsoft.AspNet.Razor.3.2.3
Microsoft.AspNet.WebPages.3.2.3

Microsoft.Web.Infrastructure.1.0.0.0

一旦提交,构建服务器就不再有问题了。

于 2015-07-25T11:06:30.347 回答
1

当我遇到这个问题时,我挠了挠头。最终,我注意到我的 web.config 的“运行时”部分中有以下部分。

<runtime>
 . . .
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
. . .
</runtime>

如您所见,这指的是程序集的版本 2,它与您在 web.config 的 system.web/compilation/assemblies 部分中的以下代码不匹配。

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

该项目的参考资料中引用的实际程序集确实是 v1.0.0.0,因此我将上面的第一段代码更改为以下代码,从而立即解决了问题。我不确定这个错误最初是如何出现的。

<runtime>
 . . .
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
. . .
</runtime>
于 2013-01-10T10:59:46.877 回答
1

对我来说,这是对System.Web.WebPages.Administration v1.0.0.0谁是罪魁祸首的参考。删除后,所有工作都无需任何 Web.config 调整。

于 2013-03-14T14:03:19.693 回答
0

在这种情况下,值得对解决方案根文件夹中的所有文件执行“在文件中查找” 。

对于上面的示例,我会搜索:System.Web.WebPages, Version=1.0.0.0

通过这种方式,您可以摆脱对旧版本的所有引用。

于 2012-10-02T16:46:01.447 回答
0

对我来说,这个问题很可能是通过 Web 平台安装程序购买更新到最新版本的 .NET,但我没有安装最新版本的 ASP.NET MVC。通过 Web 平台安装程序更新此问题修复了问题。

于 2013-09-12T06:43:17.547 回答
0

只需转到参考并搜索 System.Web.Mvc 4.0 或更高版本并添加它。我只是添加了 System.web.mvc 4.0.0.1 的引用,它可以工作。

不要忘记删除旧的 mvc 版本。

于 2015-02-02T04:33:50.297 回答
0

删除和重新添加参考 System.Web.Mvc 为我完成了这项工作

于 2015-06-08T08:00:45.867 回答