asp.net - 手动将 MVC Web 应用从 3 升级到 4,无法添加 API Controller

标签 asp.net asp.net-mvc asp.net-mvc-3 asp.net-web-api

我最近通过在 MVC4 中创建一个新的 Web 应用程序,并将所有文件复制过来,最后合并 web.config,将我的 Web 应用程序从 MVC3 升级到 4。一切都适用于现有的网络应用程序,但是我今天刚刚注意到一个非常奇怪的错误 - 如果我尝试使用默认的虚拟实现创建一个新的 API Controller ,然后浏览到该 api(例如/api/events),我得到一个 Could not load type错误。奇怪的是,如果我重建应用程序并再次点击 URL,它似乎是它提示的不同程序集,主要是在这两个之间交替:

Could not load type 'System.Web.Razor.Parser.SyntaxTree.CodeSpan' from assembly 'System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.


Could not load file or assembly 'Microsoft.Scripting, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1' or one of its dependencies. The system cannot find the file specified.

我的 web.config 包含以下程序集绑定(bind)信息:
 <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="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <!--<assemblyIdentity name="FluentValidation" publicKeyToken="a82054b837897c66" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />-->
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.0.8.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

而且我的 packages.config 看起来它包含所有正确的位:
  <package id="AspNetMvc" version="4.0.20126.16343" />
  <package id="AspNetRazor.Core" version="2.0.20126.16343" />
  <package id="AspNetWebApi" version="4.0.20126.16343" />
  <package id="AspNetWebApi.Core" version="4.0.20126.16343" />
  <package id="AspNetWebPages.Core" version="2.0.20126.16343" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
  <package id="Microsoft.Web.Optimization" version="1.0.0-beta" />
  <package id="System.Net.Http" version="2.0.20126.16343" />
  <package id="System.Net.Http.Formatting" version="4.0.20126.16343" />
  <package id="System.Web.Http.Common" version="4.0.20126.16343" />
  <package id="System.Web.Providers" version="1.1" />
  <package id="System.Web.Providers.Core" version="1.0" />

我什至尝试使用新的 mvc4 Web 应用程序中的“ Vanilla ”复制我的 web.config,但仍然给我同样的错误(无法加载文件或程序集 Microsoft.Scripting)

最佳答案

尝试从您的 web.config 中删除这些行

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

关于asp.net - 手动将 MVC Web 应用从 3 升级到 4,无法添加 API Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10249049/

相关文章:

c# - 带有奇怪字符的Visual Studio错误

asp.net 2.0 session 超时

c# - 在 View 中显示来自 Controller 的 json 数据

asp.net-mvc-3 - 如何在 View 中显示 bool 值并将值保存到数据库

asp.net-mvc-3 - 有没有办法减少 TinyMCE 文件和文件夹的数量?

c# - 仅一个变量的 session 超时不同

c# - 客户端验证错误

c# - 声明类型中的 URL 是什么

css - 为什么我的 div 框会忽略我的 css 代码?

c# - 带有 Razor 的 MVC 4 中的 DropDownList