【问题标题】:Could not load file or assembly 'System.Web.Http 4.0.0 after update from 2012 to 2013从 2012 年到 2013 年更新后无法加载文件或程序集“System.Web.Http 4.0.0”
【发布时间】:2013-10-29 18:54:54
【问题描述】:

我做了升级根据。 http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

我得到了错误。其他人有这个错误吗?

“/”应用程序中的服务器错误。

无法加载文件或程序集 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其之一 依赖关系。定位程序集的清单定义不 匹配程序集引用。 (HRESULT 异常:0x80131040)
说明:执行过程中发生未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.IO.FileLoadException:无法加载文件 或程序集 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)

来源错误:

第 48 行:第 49 行:第 50 行:} 行 51:第 52 行:受保护的无效 Application_BeginRequest(对象 发件人,EventArgs e)

源文件: d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs 行: 50

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

=== 预绑定状态信息 === LOG: DisplayName = System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (完全指定)日志:Appbase = file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG:初始 PrivatePath = D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin 调用程序集:ThirdPartyWebAPI,Version=1.0.0.0,Culture=neutral, PublicKeyToken=null。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件: D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\web.config 日志:使用 主机配置文件: C:\Users\michalc\Documents\IISExpress\config\aspnet.config 日志:使用 机器配置文件来自 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config。 LOG:后策略参考:System.Web.Http,Version=4.0.0.0, 文化=中性,PublicKeyToken=31bf3856ad364e35 日志:正在尝试 下载新网址 file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET 文件/root/9184b2ea/c6d4b139/System.Web.Http.DLL。日志: 正在尝试下载新 URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET 文件/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL。日志: 正在尝试下载新 URL file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。 警告:比较程序集名称导致不匹配:主要 版本 ERR:无法完成程序集设置 (hr = 0x80131040)。 探测终止。

堆栈跟踪:

[FileLoadException: 无法加载文件或程序集 'System.Web.Http, 版本=4.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 或 它的依赖项之一。定位程序集的清单定义 与程序集引用不匹配。 (HRESULT 的例外情况: 0x80131040)]ThirdPartyWebAPI.WebApiApplication.Application_Start() 在 d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs:50

[HttpException (0x80004005): 无法加载文件或程序集 'System.Web.Http,版本=4.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+9935033
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext、HttpContext 上下文、MethodInfo[] 处理程序)+118
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态, MethodInfo[] 处理程序、IntPtr appContext、HttpContext 上下文)+172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+336
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): 无法加载文件或程序集 'System.Web.Http,版本=4.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。这 定位程序集的清单定义与程序集不匹配 参考。 (HRESULT 异常:0x80131040)]
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文) +9913572 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+254


版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18408

【问题讨论】:

  • 您是否尝试过重新添加对“System.Web.Http”的引用

标签: c# asp.net-web-api odata visual-studio-2013


【解决方案1】:

我通过reinstalling the NuGet package 修复了这个问题,它纠正了损坏的依赖关系。从包管理器中运行:

Update-Package Microsoft.AspNet.WebApi -reinstall

【讨论】:

  • 在本地运行 Web 应用程序对我来说没问题 (F5),但是在部署到远程服务器(使用 WebDeploy)时,程序集没有复制到服务器。我不确定是否应该复制程序集。无论如何,在运行此命令后,所有必需的程序集都标有 copy-local=true 并且在部署应用程序后开始正常工作
  • 只是为了添加更平衡的图片 - 这并没有解决我的问题。
  • 确保将所需的更新添加到任何依赖项目,例如测试等。
  • 我这样做了,它做了太多更改,但我注意到它调整了 web.config 中的绑定重定向,我放弃了它所做的所有其他更改,这对我有用。
  • 现在我收到一个新错误:新版本是 Version=5.2.3.0,它需要 Version=4.0.0.0
【解决方案2】:

要解决无法加载文件或程序集“System.Web.Http”错误,请使用 NuGet 安装 Web API 2.1 WebHost。

在解决方案资源管理器中的引用右键单击并选择管理 nuget 包。 (如果没有安装nuget)

在左侧的管理 NuGet 包窗口中单击在线,然后在右上角搜索 Web Host 并安装 Microsoft ASP.NET Web API 2.1 Web Host。 (安装后安装按钮将变为绿色对勾)

之后项目将重新加载,当它再次构建时,错误将得到解决,项目将调试并运行。错误将消失,您可能会“找不到资源。只需将 url ( ex from localhost:52088/ 附加到 localhost:52088api/products )

你的问题很好,帮助了我。

希望这个答案有帮助!

【讨论】:

  • 感谢 Catto,它治愈了我很多。
【解决方案3】:

您需要添加程序集重定向:

<configuration>

   ....

   <runtime>
      <assemblyBinding>
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      </assemblyBinding>
   </runtime>

   ...

</configuration>

您很可能必须为更多的程序集(如虚拟主机等)执行此操作。

【讨论】:

  • 我编辑了答案。出于某种原因,DLL 名称从 Castle Windsor 更改为 System.Web.Http
  • 在未确保新程序集与前一个程序集二进制兼容的情况下,切勿添加二进制重定向。
【解决方案4】:

或者您可以从 NuGet 包管理器控制台执行此操作

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

然后您将能够添加对 System.Web.Http.WebHost 5.0 的引用

【讨论】:

  • 为我工作,只需安装 Install-Package Microsoft.AspNet.WebApi
【解决方案5】:

当我安装 Web Api 2.2 时,帮助这个错误开始了。我将此添加到 web.config 中,它解决了我的问题。

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

【讨论】:

  • 在发布到 Azure 时,在从一开始就是 Web Api 2.2 的项目上也是如此。该项目在本地运行良好,但在 Azure 上我收到了来自 OP 的错误。将这些行添加到 web.config 并重新发布到 Azure 修复它。
【解决方案6】:

解决此问题的正确解决方案是按照以下步骤操作

。如果您有旧版本到 15.5.4,请更新 Visual Studio(可选)

  1. 从 web.config 中删除所有绑定重定向

  2. 将此添加到 csproj 文件中:

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
  1. 构建。

  2. bin文件夹下应该有(WebAppName).dll.config文件。

  3. 它应该有重定向。将这些复制到 web.config

  4. 再次从csproj文件中删除上面的片段

  5. 应该可以工作

Detailed Blog

【讨论】:

  • 它不会创建所有的绑定
【解决方案7】:

我只是在缺少的程序集上设置了Copy Local = true 并且有效。这当然是通过右键单击缺少的参考(在错误消息中说明)并选择属性来实现的;如下:

这应该可以解决一个问题,因为可能有不止一个程序集导致问题 - 我所做的是选择所有程序集并右键单击它们;选定的属性;并将它们全部设置为 Copy Local = true;然后重新发布。

【讨论】:

  • 完美运行。我只需要在 System.Web.Http 和 System.Net.Http.Formatting 上执行“Copy Local = true”
【解决方案8】:

对我来说,它只是在生产环境中崩溃,而不是在本地机器上;解决方法是删除 /bin 文件夹的内容,然后重新生成。

【讨论】:

  • 这是人们应该检查的。我遇到了同样的问题。原来,我的应用程序前端有一个不必要的 Microsoft.AspNet.Cors dll。我在 prod 系统上删除了 bin 文件夹,重新发布了网站,然后变魔术了。
【解决方案9】:

只是一个明显但可能有用的提示......请记住检查您在 webconfig 程序集绑定中指定的新版本是否与您在项目引用中引用的版本相同。 (即,当我写这篇文章时……如果您最近在 System.Web.Http 上完成了 NUGet,这将是 5.1.0.0

【讨论】:

    【解决方案10】:
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
    

    【讨论】:

      【解决方案11】:
       Installing NuGet package ASP.NET.MVC solved the issue for me. 
       To install package.
       - Right click on project 
       - Select "Manage NuGet Packages"
       - Select Online->Nuget.org from left menu
       - select "Microsoft ASP.NET MVC"
       - Click Install
      
       If you have already installed package earlier, please update the package by selecting Updates from left menu and then selecting "Microsoft ASP.NET" and click Update.
      

      【讨论】:

        【解决方案12】:

        这可能对某人有所帮助。

        我决定使用 MVC4 应用程序。

        运行项目,工作

        然后安装了几个包,例如,
        Microsoft ASP.NET WEB API 2.2(4 个包)
        Microsoft ASP.NET WEB API 2.2 帮助页面
        Microsoft ASP.NET WEB API 2.2 OWIN

        运行项目,与问题中提到的错误相同

        解决方案:

        web.config

         <dependentAssembly>
              <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
              <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
              </dependentAssembly>
              <dependentAssembly>
                <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
         </dependentAssembly>
        


        问题已解决


        然后,发现一些 hotfix 错误, 要解决它, 转到您的 MVC4 项目的 VIEW 文件夹, 找到second web.config 文件并将版本从 2.0.0.0 更改为 3.0.0.0 如下所示.


        <configSections>
            <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
              <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
              <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
            </sectionGroup>
          </configSections>
        

        【讨论】:

          【解决方案13】:

          就我而言,我实际上完全错过了我的web.config,它具有适当的绑定重定向。恢复web.config 解决了这个错误。

          【讨论】:

            【解决方案14】:

            我可以通过在主应用程序的 app.config 中添加程序集引用来解决 System.Net.HTTP 的类似问题。

              <runtime>
                <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                  <dependentAssembly>
                    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
                    <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.0.0.0" />
                  </dependentAssembly></runtime>
            

            【讨论】:

              【解决方案15】:

              我发现删除 BIN 文件夹然后重建项目可以解决问题,而无需卸载/重新安装包。

              【讨论】:

                【解决方案16】:

                我找到了解决方案!删除项目目录下名为 package 的文件夹,然后重新构建运行。

                【讨论】:

                  【解决方案17】:

                  是的!!!

                  Install-Package Microsoft.AspNet.WebApi -Version 5.0.0
                  

                  在我的情况下它工作正常....thnkz

                  【讨论】:

                  • 这只是 existing answer 的副本。看来您没有其他要添加的内容了,请考虑删除此内容。
                  【解决方案18】:

                  我什么都没做,只是将开发 Bin 文件夹 DLLs 复制到在线部署的 Bin 文件夹中,对我来说效果很好。

                  【讨论】:

                    【解决方案19】:

                    我在使用发布功能部署到 Azure 时遇到了这个问题。 记得在目的地清除文件。

                    Publish Settings -&gt; File Publish Options drop down -&gt; Check Remove additional files at destination

                    这解决了我的问题,以防人们不得不像我一样四处寻找。我的项目/解决方案中的所有内容都是相同的版本,只是不在我要部署的目的地。

                    【讨论】:

                      【解决方案20】:

                      我在 System.Web.Http.WebHost 中遇到了同样的问题,引用了 Version=5.2.6.0,但最新的 NuGet 包是 5.2.7.0。我编辑了 web.config 文件,重新安装了 NuGet 包,然后为我的所有项目编辑了 Visual Studio 项目文件,以确保不保留对 5.2.6.0 的引用。即便如此,问题仍然存在。

                      然后,我在 bin 文件夹中查找引发异常的项目,在该文件夹中我找到了我的其他项目之一的 DLL,该项目不是依赖项,不应该存在。我删除了有问题的 DLL(使用 5.2.6.0 版本的 System.Web.Http.WebHost 编译),重新构建了麻烦的项目,现在它可以工作了。

                      【讨论】:

                        【解决方案21】:

                        正如其他人所说,只需使用 nuget 将 MVC 包重新安装到您的 Web 项目中,但请确保将 MVC 包添加到取决于 Web 项目的任何项目中,例如单元测试。如果您单独构建每个包含的项目,您会看到需要更新的项目。

                        【讨论】:

                          【解决方案22】:

                          我有同样的问题,重新安装包不起作用。

                          我的应用程序在 LocalIIS(不是 IIS EXPRESS)中运行。我启用了程序集加载跟踪并发现它想要从下面的临时捕获加载 System.Web.Http 加载。所以删除所有的catch文件夹

                          C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files[我的应用程序]

                          【讨论】:

                            【解决方案23】:

                            我通过在运行 nuget 后还原 nuget 对我的 web.config 所做的更改来解决此问题。将更改恢复到以前的工作版本。

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

                            【讨论】:

                              【解决方案24】:

                              为我解决问题的是重新安装 Microsoft ASP.NET Web API 2.2 帮助页面 和 Microsoft ASP.NET Web API 2.2 OWIN 软件包。我同时重新安装了两者,但我认为是前者解决了问题。

                              我尝试了这里提供的前几个解决方案,但没有帮助,然后我将我的依赖项与项目中有效的依赖项(来自 Pluralsight 的课程)进行了比较,上面的两个依赖项是较低版本( 5.0.0) 所以我将它们更新到 5.2.3 并开始工作。

                              【讨论】:

                                【解决方案25】:

                                我是从 WCF 服务获得的。对我来说(因为问题显示在本地开发中),我只需要删除解决方案下的 bin 文件夹的内容。重建工作再次正常。

                                【讨论】:

                                  【解决方案26】:

                                  ASP.NET Version:4.0.30319.18408 属于.Net4.5,System.Web.Http Version=4.0.0.0 兼容.NET4.0。因此,您拥有的版本不兼容。您应该将 System.Web.Http 更新到与 .Net4.5 兼容的 5.0.0.0 版本

                                  【讨论】:

                                    【解决方案27】:

                                    我遇到了类似的问题。之前一切正常。它最初是使用 Web 表单制作的,后来为某些东西添加了 Web API。

                                    • 尝试卸载、安装和重新安装 Microsoft.AspNet.WebApi 包。
                                    • 尝试从解决方案中删除 packages 文件夹并让 NuGet 在 VS 中恢复。
                                    • 尝试删除单个程序集引用(在引用下)并重新安装包。
                                    • 尝试在几个答案中提到的 web.config 中添加绑定重定向到 5.2.3.0 版本。对我没有任何帮助。

                                    有效的是,在 Visual Studio 中,将发布配置文件设置从“发布”更改为“调试”。奇怪,但这就是有效的。所以在这里分享。

                                    【讨论】:

                                      【解决方案28】:

                                      如果您在一个解决方案上使用多个项目,并将一个项目中的方法调用到另一个项目,请确保所有项目(称为项目和调用者项目)使用唯一的'System.Net.Http'版本

                                      【讨论】:

                                        【解决方案29】:

                                        将参考中的 dll 的特定版本标志从 true 更改为 false

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2015-01-30
                                          • 2018-03-14
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          相关资源
                                          最近更新 更多