【问题标题】:aspnet_compiler finding wrong version of System.Web.WebPages 1.0.0.0 instead of 2.0.0.0aspnet_compiler 发现错误版本的 System.Web.WebPages 1.0.0.0 而不是 2.0.0.0
【发布时间】:2012-05-11 05:37:13
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我通过在 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 网页的原因。

    【讨论】:

    • 我开始这样做,然后意识到所有的 MVC 都是版本 3,所以我没有更改 web 配置,而是将引用的 dll 替换为正确的版本。
    【解决方案2】:

    我们遇到了类似的问题。

    我们现在使用 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 重新添加特定版本,则它可以正常工作。

    【讨论】:

    • 这里完全一样 - 从 GAC 作品中删除引用并添加它。
    【解决方案3】:

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

    【讨论】:

    • 谢谢,这刚刚解决了我处理了两天的问题,我没有意识到我有那个目录。
    • 很高兴它有帮助,很遗憾听到失去的时间:)
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

      我在将站点从 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

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

      【讨论】:

        【解决方案6】:

        对我来说,这是对罪魁祸首System.Web.WebPages.Administration v1.0.0.0 的引用。删除后,无需任何 Web.config 调整即可正常运行。

        【讨论】:

          【解决方案7】:

          当我遇到这个问题时,我挠了挠头。最终我注意到我的 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>
          

          【讨论】:

            【解决方案8】:

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

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

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

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                  【解决方案11】:

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

                  【讨论】:

                    猜你喜欢
                    • 2012-06-09
                    • 2012-09-22
                    • 2012-12-03
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多