从2012年到2013年更新后无法加载文件或程序集'System.Web.Http 4.0.0

Mic*_*eli 179 c# odata asp.net-web-api visual-studio-2013

我按照升级进行了升级. 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,文化=中性公钥= 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,版本= 4.0.0.0,文化=中性公钥= 31bf3856ad364e35"无法加载.

===预绑定状态信息===日志:DisplayName = System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35(完全指定)LOG:Appbase = file:/// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/日志:初始PrivatePath = D:\ SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin调用程序集:ThirdPartyWebAPI,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null.===日志:此绑定在默认加载上下文中启动.日志:使用应用程序配置文件: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的文件.日志:后策略引用: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)] d:\ SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs中的ThirdPartyWebAPI.WebApiApplication.Application_Start():50

[HttpException(0x80004005):无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context,HttpApplication app)+9935033
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext,HttpContext context,MethodInfo [] handlers)+118
System.Web.HttpApplication .InitSpecial(HttpApplicationState状态,MethodInfo []处理程序,IntPtr appContext,HttpContext上下文)+172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext context)+336
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)+296

[HttpException(0x80004005):无法加载文件或程序集'System.Web.Http,Version = 4.0.0.0,Culture = neutral,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

Pat*_*ild 283

我通过重新安装NuGet包修复了这个问题,该包纠正了破坏的依赖关系.从包管理器中运行:

Update-Package Microsoft.AspNet.WebApi -reinstall
Run Code Online (Sandbox Code Playgroud)

  • 只是为了增加一个更平衡的画面 - 这对我来说并没有解决问题. (3认同)
  • 在本地运行 Web 应用程序对我来说没问题(F5),但是当部署到远程服务器(使用 WebDeploy)时,程序集没有复制到服务器。我不确定是否应该复制程序集。无论如何,运行此命令后,所有必需的程序集都被标记为 copy-local=true 并且在部署应用程序后开始正常工作 (2认同)
  • 务必将所需的更新添加到任何依赖项目,如测试等. (2认同)

Cat*_*tto 84

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

在参考文献的解决方案资源管理器中右键单击并选择管理nuget包.(如果没有安装nuget)

在此输入图像描述

在左侧的manage NuGet Packages窗口中单击Online,然后在右上角搜索Web Host并安装Microsoft ASP.NET Web API 2.1 Web Host.(安装完成后,安装按钮将变为绿色检查)

之后,项目将重新加载,当它再次构建时,错误将被解决,项目将调试并运行.错误将消失,您可能是'无法找到资源.只需添加url(从localhost:52088 /到localhost:52088api/products)

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

希望这个答案有帮助!


Ali*_*tad 60

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

<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>
Run Code Online (Sandbox Code Playgroud)

很可能你必须为webhosting等更多的程序集执行此操作.

  • 在不确保新程序集与前一个程序集二进制兼容的情况下,绝不应添加二进制重定向. (6认同)

Sam*_*eer 17

或者您可以从NuGet Package Manager Console执行此操作

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0
Run Code Online (Sandbox Code Playgroud)

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


jhi*_*den 16

当我安装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>
Run Code Online (Sandbox Code Playgroud)


Saj*_*ran 5

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

. 如果您的版本较旧,请更新 Visual Studio 至 15.5.4(可选)

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

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

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
  1. 建造。

  2. 在 bin 文件夹中,应该有一个(WebAppName).dll.config文件。

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

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

  5. 它应该工作

Detailed Blog