199

我做了升级根据。 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)
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.IO.FileLoadException:无法加载文件或程序集“System.Web.Http,版本=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

源错误:

第 48 行:第 49 行:第 50 行:} 第 51 行:第 52 行:protected void Application_BeginRequest(object sender, 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 (完全指定) LOG: Appbase = file:///D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG:初始 PrivatePath = D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin 调用程序集:ThirdPartyWebAPI,版本=1.0.0.0,文化=中性,PublicKeyToken=null。=== LOG:此绑定在默认加载上下文中开始。LOG:使用应用程序配置文件:D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\web.config LOG:使用主机配置文件:C:\Users\michalc\Documents\IISExpress\config\aspnet.config LOG:使用机器配置来自 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 的文件。LOG:后策略参考:System.Web.Http,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35 日志:正在尝试下载新的 URL 文件:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http.DLL。日志:正在尝试下载新的 URL 文件:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http .DLL。日志:正在尝试下载新的 URL 文件:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集设置(hr = 0x80131040)。探测终止。正在尝试下载新的 URL 文件:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL . 日志:正在尝试下载新的 URL 文件:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集设置(hr = 0x80131040)。探测终止。正在尝试下载新的 URL 文件:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL . 日志:正在尝试下载新的 URL 文件:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL。警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集设置(hr = 0x80131040)。探测终止。未能完成程序集设置 (hr = 0x80131040)。探测终止。未能完成程序集设置 (hr = 0x80131040)。探测终止。

堆栈跟踪:

[FileLoadException: 无法加载文件或程序集 'System.Web.Http, Version=4.0.0.0, Culture=neutral, 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 state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +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 context)+9913572 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+101 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext context)+254


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

4

29 回答 29

303

我通过重新安装 NuGet 包解决了这个问题,它纠正了损坏的依赖关系。从包管理器中,运行:

Update-Package Microsoft.AspNet.WebApi -reinstall
于 2014-03-07T20:31:40.637 回答
85

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

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

在此处输入图像描述

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

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

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

希望这个答案有帮助!

于 2014-03-13T20:45:02.130 回答
63

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

<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>

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

于 2013-10-21T11:10:55.733 回答
18

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

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

于 2013-12-17T19:49:29.983 回答
17

当我安装 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>
于 2014-09-16T22:59:00.833 回答
5

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

. 如果您有旧版本到 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

于 2017-12-29T17:19:04.207 回答
4

我只是简单地设置Copy Local = true了缺少的组件,并且工作正常。这当然是通过右键单击缺少的参考(在错误消息中说明)并选择属性来实现的;如下:

在此处输入图像描述

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

于 2016-07-04T13:45:25.007 回答
3

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

于 2018-02-22T11:51:17.047 回答
2

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

于 2014-02-17T15:31:28.900 回答
2
<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>
于 2015-03-23T14:20:02.290 回答
2
 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.

在此处输入图像描述

在此处输入图像描述

于 2015-10-15T10:14:50.700 回答
2

这可能会帮助某人。

我决定使用 MVC4 应用程序。

运行项目,工作

然后安装了一些软件包,例如
Microsoft ASP.NET WEB API 2.2(4 个软件包)
Microsoft ASP.NET WEB API 2.2 Help Page
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>


问题解决了


但随后,发现一些修补程序错误,要解决它,请转到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>

于 2016-02-13T09:48:02.103 回答
2

我可以通过在主应用程序的 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>
于 2017-07-19T07:50:17.800 回答
2

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

于 2021-01-08T17:46:22.310 回答
2

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

于 2016-07-26T18:27:27.957 回答
1

我在引用 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 编译),重新构建了麻烦的项目,现在它可以工作了。

于 2019-06-29T21:18:23.447 回答
1

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

于 2015-07-07T07:41:58.683 回答
1

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

Publish Settings -> File Publish Options drop down -> Check Remove additional files at destination

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

于 2017-09-15T16:55:37.520 回答
1

是的!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

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

于 2015-12-07T18:59:46.580 回答
1

我什么也没做,只是将开发Bin文件夹DLL复制到在线部署的Bin文件夹中,它对我来说很好用。

于 2017-06-15T15:46:10.427 回答
0

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

于 2015-02-09T15:39:23.843 回答
0

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

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

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

于 2015-03-16T08:49:19.607 回答
0

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

于 2016-10-12T19:15:31.160 回答
0

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

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

于 2015-12-30T20:15:24.710 回答
0

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

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

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

于 2017-09-12T18:24:16.547 回答
0

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

于 2016-03-09T10:44:33.237 回答
0

我通过恢复 nugetweb.config在运行后对我所做的更改解决了这个问题nuget。将更改恢复到以前的工作版本。

  <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>
于 2015-07-23T00:48:10.707 回答
0

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

于 2018-09-26T05:46:07.653 回答
0

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

于 2018-06-27T07:21:03.587 回答