【问题标题】:Why a WCF DataService app fails because of System.Web.Mvc 4.0?为什么 WCF DataService 应用程序会因为 System.Web.Mvc 4.0 而失败?
【发布时间】:2015-02-13 10:02:03
【问题描述】:

我们在一些服务器上安装了 .NET 4.5.1,突然旧 WCF 数据服务应用程序失败并出现以下错误:

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

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

装配负载跟踪:以下信息可能有助于 确定为什么程序集 'System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 无法加载。

=== 预绑定状态信息 === LOG: DisplayName = System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (完全指定)日志:Appbase = file:///C:/inetpub/wwwroot/GranittService/ LOG: Initial PrivatePath = C:\inetpub\wwwroot\GranittService\bin 调用程序集:System.Web, 版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件: C:\inetpub\wwwroot\GranittService\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 文件/granittservice/573ec422/2e9e1d06/System.Web.Mvc.DLL。 日志:尝试下载新 URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET 文件/granittservice/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 文件/granittservice/573ec422/2e9e1d06/System.Web.Mvc.EXE。 日志:尝试下载新 URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET 文件/granittservice/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 需要什么?

【问题讨论】:

    标签: asp.net-mvc binding wcf-data-services


    【解决方案1】:

    您可能需要检查您的 web.config 是否将 assemblyBinding 重定向到未安装的 MVC 版本(在您的情况下为 4.0): /configuration/runtime/assemblyBinding:

      <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 包,然后它就起作用了。但我仍然不明白为什么需要它,因为它没有被直接或间接引用。
    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2011-04-30
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多