关于c#:从2012年到2013年更新后无法加载文件或程序集’System.Web.Http 4.0.0

Could not load file or assembly 'System.Web.Http 4.0.0 after update from 2012 to 2013

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

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

Server Error in '/' Application.

Could not load file or assembly 'System.Web.Http, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its
dependencies. The located assembly's manifest definition does not
match the assembly reference. (Exception from HRESULT: 0x80131040)
Description: An unhandled exception occurred during the execution of
the current web request. Please review the stack trace for more
information about the error and where it originated in the code.

Exception Details: System.IO.FileLoadException: Could not load file
or assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The
located assembly's manifest definition does not match the assembly
reference. (Exception from HRESULT: 0x80131040)

Source Error:

Line 48: Line 49: Line 50: } Line
51: Line 52: protected void Application_BeginRequest(object
sender, EventArgs e)

Source File:
d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs Line:
50

Assembly Load Trace: The following information can be helpful to
determine why the assembly 'System.Web.Http, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be loaded.

=== Pre-bind state information === LOG: DisplayName = System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified) LOG: Appbase =
file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: Initial
PrivatePath = D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\bin
Calling assembly : ThirdPartyWebAPI, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null.
=== LOG: This bind starts in default load context. LOG: Using application configuration file:
D:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\web.config LOG: Using
host configuration file:
C:\Users\michalc\Documents\IISExpress\config\aspnet.config LOG: Using
machine configuration file from
C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: System.Web.Http, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35 LOG: Attempting
download of new URL
file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary
ASP.NET Files/root/9184b2ea/c6d4b139/System.Web.Http.DLL. LOG:
Attempting download of new URL
file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary
ASP.NET
Files/root/9184b2ea/c6d4b139/System.Web.Http/System.Web.Http.DLL. LOG:
Attempting download of new URL
file:///D:/SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major
Version ERR: Failed to complete setup of assembly (hr = 0x80131040).
Probing terminated.

Stack Trace:

[FileLoadException: Could not load file or assembly 'System.Web.Http,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or
one of its dependencies. The located assembly's manifest definition
does not match the assembly reference. (Exception from HRESULT:
0x80131040)] ThirdPartyWebAPI.WebApiApplication.Application_Start()
in d:\SM\7.4Test\WebAPIServerV2\ThirdPartyWebAPI\Global.asax.cs:50

[HttpException (0x80004005): Could not load file or assembly
'System.Web.Http, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The
located assembly's manifest definition does not match the assembly
reference. (Exception from 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 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): Could not load file or assembly
'System.Web.Http, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The
located assembly's manifest definition does not match the assembly
reference. (Exception from 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


我通过重新安装nuget包修复了这个问题,该包纠正了损坏的依赖项。从包管理器运行:

1
Update-Package Microsoft.AspNet.WebApi -reinstall


若要解决无法加载文件或程序集"system.web.http"错误,请使用nuget安装Web API 2.1 WebHost。

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

enter image description here

在左侧的"管理Nuget包"窗口中,单击"联机",然后在右上角搜索Web主机并安装Microsoft ASP.NET Web API 2.1 Web主机。(安装后,安装按钮将变为绿色检查)

之后,项目将重新加载,当再次生成时,错误将得到解决,项目将调试并运行。错误将消失,您可能是"找不到资源"。只需附加URL(例如从localhost:52088/到localhost:52088API/产品)

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

希望这个答案有帮助!


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<configuration>

   ....

   <runtime>
     
    <dependentAssembly>
       
        <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      </assemblyBinding>
   </runtime>

   ...

</configuration>

最有可能的情况是,您需要为更多的程序集(如WebHosting等)执行此操作。


或者您可以从Nuget Package Manager控制台执行此操作

1
 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

然后您就可以添加对system.web.http.webhost 5.0的引用了。


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

1
2
3
4
  <dependentAssembly>
   
    <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>


我只是简单地将缺失的组件设置为Copy Local = true,这样就有效了。当然,这是通过右键单击缺少的引用(在错误消息中说明)并选择属性来实现的;如下所示:

enter image description here

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


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


解决此问题的正确方法是遵循以下步骤

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

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

  • 将此添加到csproj文件:

  • 1
    2
    3
    4
     <PropertyGroup>
      <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
  • 建造。

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

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

  • 再次从csproj文件中删除上述截图

  • 它应该工作

  • Detailed Blog


    这可能对某人有所帮助。

    我决定使用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中

    1
    2
    3
    4
    5
    6
    7
    8
     <dependentAssembly>
         
          <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
          </dependentAssembly>
          <dependentAssembly>
           
            <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
     </dependentAssembly>

    问题解决

    但后来发现了一些修补程序错误,要解决这个问题,转到MVC4项目的"查看"文件夹,找到secondweb.config文件,并将版本从2.0.0.0.0更改为3.0.0.0,如下所示。

    1
    2
    3
    4
    5
    6
    <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>


    只是一个明显但可能有用的提示……请记住检查您在webconfig程序集绑定中指定的新版本是否与您在项目引用中引用的版本相同。(我写这篇文章的时候,如果你最近在system.web.http上做了一个nuget,这个值是5.1.0.0)


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


    1
    2
    3
    4
    5
    6
    7
    8
    9
     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.

    enter image description here

    enter image description here


    1
    2
    3
    4
    5
    6
    7
    8
    <dependentAssembly>
       
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
       
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
    </dependentAssembly>

    我找到了解决办法!删除项目目录中名为package的文件夹,然后重新生成以运行它。


    对!!!!

    1
    Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

    在我的情况下,它工作得很好……thnkz


    我什么也没有,只是复制开发bin文件夹dlls到在线部署bin文件夹,它对我来说很好。


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

    1
    2
    3
    4
    5
    6
      <runtime>
       
          <dependentAssembly>
           
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.0.0.0" />
          </dependentAssembly></runtime>

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


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

    1
    2
    3
    4
      <dependentAssembly>
       
        <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
      </dependentAssembly>


    我是从WCF服务那里得到的。对于我(正如在本地开发人员中显示的问题一样),我只需要删除解决方案下bin文件夹的内容。重建工作再次顺利进行。


    ASP.NET版本:4.0.30319.18408属于.net4.5,System.Web.HTTP版本=4.0.0.0与.net4.0兼容。所以您拥有的版本不兼容。您应该将system.web.http更新到与.net4.5兼容的5.0.0.0版本。


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

    我的应用程序在本地(而不是IIS Express)中运行。我启用了程序集加载跟踪,发现它需要从低于温度的catch加载system.web.http。因此,删除其中的所有catch文件夹。

    C:WindowsMicrosoft.NETFrameworkv4.0.30319临时ASP.NET文件[我的应用程序]


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


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

    • 已尝试卸载、安装和重新安装Microsoft.aspnet.WebAPI包。
    • 尝试从解决方案中删除packages文件夹,并让nuget在vs.
    • 尝试删除单个程序集引用(在"引用"下)并重新安装包。
    • 尝试在几个答案中提到的web.config中添加绑定重定向到5.2.3.0版本。对我来说没什么用。

    在Visual Studio中,将发布配置文件设置从"发布"更改为"调试"。很奇怪,但这才起作用。所以在这里分享。


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

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

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


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


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

    我尝试了这里提供的前几个解决方案,但没有帮助,然后我将我的依赖项与一个项目中的那些(从一个关于复数的课程)进行了比较,上面的两个依赖项是一个较低的版本(5.0.0),因此我将它们更新到5.2.3,然后它开始工作。