aspnet_compiler发现System.Web.WebPages 1.0.0.0而不是2.0.0.0的错误版本

时间:2012-05-01 17:58:47

标签: asp.net .net asp.net-mvc-4

我有一个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>

11 个答案:

答案 0 :(得分:39)

我通过在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>

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

答案 1 :(得分: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重新添加特定版本,则它可以正常工作。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

MvcBuildViews设置为true时,我也会发生此错误。

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

似乎构建MVC项目本身就会成功,只要它不会触发其依赖项目的构建(即它们是最新的)。但使用“构建解决方案”构建始终会因此错误而失败。

答案 4 :(得分:2)

将站点从MVC 3升级到5.2.3.0时遇到此问题。

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

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

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

Microsoft.Web.Infrastructure.1.0.0.0

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

答案 5 :(得分:1)

当我拥有它时,我在这个问题上划了一会儿。最后我注意到我在web.config的“runtime”部分中有以下部分。

<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" />

项目的References中引用的实际程序集确实是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>

答案 6 :(得分:1)

对我来说,这是System.Web.WebPages.Administration v1.0.0.0谁是罪魁祸首的提法。一旦删除,所有工作都没有任何Web.config调整。

答案 7 :(得分:0)

在这种情况下,值得在解决方案的根文件夹中的所有文件中执行&#39;在文件中查找

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

别忘了删除旧的mvc版本。

答案 10 :(得分:0)

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