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

Tod*_*ith 36 .net asp.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>
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

han*_*ngy 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>
Run Code Online (Sandbox Code Playgroud)

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


The*_*ess 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重新添加特定版本,则它可以正常工作.