Asp.net mvc 为什么WCF DataService应用程序因System.Web.Mvc 4.0而失败?

Asp.net mvc 为什么WCF DataService应用程序因System.Web.Mvc 4.0而失败?,asp.net-mvc,binding,wcf-data-services,Asp.net Mvc,Binding,Wcf Data Services,我们已经在一些服务器上安装了.NET 4.5.1,一个旧版WCF数据服务应用程序突然出现故障,出现以下错误: 异常详细信息:System.IO.FileNotFoundException:无法加载 文件或程序集'System.Web.Mvc,版本=4.0.0.0,区域性=中性, PublicKeyToken=31bf3856ad364e35'或其依赖项之一。这个 系统找不到指定的文件 源错误: 在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来

我们已经在一些服务器上安装了.NET 4.5.1,一个旧版WCF数据服务应用程序突然出现故障,出现以下错误:

异常详细信息:System.IO.FileNotFoundException:无法加载 文件或程序集'System.Web.Mvc,版本=4.0.0.0,区域性=中性, PublicKeyToken=31bf3856ad364e35'或其依赖项之一。这个 系统找不到指定的文件

源错误:

在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常

程序集加载跟踪:以下信息有助于 确定为什么程序集'System.Web.Mvc,Version=4.0.0.0, 无法加载区域性=中性,PublicKeyToken=31bf3856ad364e35'

===预绑定状态信息===日志:DisplayName=System.Web.Mvc,版本=4.0.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35 (完全指定)日志:Appbase= file:///C:/inetpub/wwwroot/GranittService/ 日志:初始私有路径= C:\inetpub\wwwroot\granitservice\bin调用程序集:System.Web, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a。 ==日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件: C:\inetpub\wwwroot\granitservice\web.config日志:使用主机 配置文件: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config日志: 使用来自的计算机配置文件 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config。 日志:发布策略参考:System.Web.Mvc,版本=4.0.0.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35日志:正在尝试 下载新网址 file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/GranitService/573ec422/2e9e1d06/System.Web.Mvc.DLL。 日志:正在尝试下载新URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET 文件/GranitService/573ec422/2e9e1d06/System.Web.Mvc/System.Web.Mvc.DLL。 日志:正在尝试下载新URL file:///C:/inetpub/wwwroot/GranittService/bin/System.Web.Mvc.DLL. 日志: 正在尝试下载新的URL file:///C:/inetpub/wwwroot/GranittService/bin/System.Web.Mvc/System.Web.Mvc.DLL. 日志:正在尝试下载新URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET文件/GranitService/573ec422/2e9e1d06/System.Web.Mvc.EXE。 日志:正在尝试下载新URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET 文件/GranitService/573ec422/2e9e1d06/System.Web.Mvc/System.Web.Mvc.EXE。 日志:正在尝试下载新URL file:///C:/inetpub/wwwroot/GranittService/bin/System.Web.Mvc.EXE. 日志: 正在尝试下载新的URL file:///C:/inetpub/wwwroot/GranittService/bin/System.Web.Mvc/System.Web.Mvc.EXE.


请注意,调用程序集是System.Web。是的,WCF数据服务依赖于System.Web,但System.Web不依赖于System.Web.Mvc,我们的服务使用的其他程序集(这是一个相当基本的WCF数据服务应用程序,将数据库公开为OData提要)。什么要求System.Web.Mvc?

您可能需要检查Web.config中的assemblyBinding重定向到未安装的Mvc版本(在您的情况下为4.0): /配置/运行时/组装绑定:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
  </dependentAssembly>


如果您不需要MVC,您可以尝试删除项目中的配置元素或任何MVC引用,看看它是否可以构建(和测试)。

谢谢。我没有这个部分,项目也没有使用System.Web.Mvc,所以这个部分的出现并没有改变任何事情。作为一种变通方法,我在项目中包括了Microsoft.Aspnet.Mvc NuGet包,然后它就成功了。但我仍然不明白为什么需要它,因为它既没有直接引用也没有间接引用。