Não foi possível carregar o arquivo ou assembly 'System.Web.Http 4.0.0 após a atualização de 2012 para 2013

183

Eu fiz a atualização de acordo com. 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

Eu recebo o erro. Alguém mais recebeu esse erro?

Erro de Servidor na '/' Aplicação.

Não foi possível carregar o arquivo ou assembly 'System.Web.Http, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou uma de suas dependências. A definição de manifesto da montagem localizada não corresponde à referência da montagem. (Exceção de HRESULT: 0x80131040)
Descrição: Ocorreu uma exceção não tratada durante a execução da solicitação da Web atual. Revise o rastreamento de pilha para obter mais informações sobre o erro e onde ele se originou no código.

Detalhes da exceção: System.IO.FileLoadException: Não foi possível carregar o arquivo ou assembly 'System.Web.Http, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou uma de suas dependências. A definição de manifesto da montagem localizada não corresponde à referência da montagem. (Exceção de HRESULT: 0x80131040)

Erro de origem:

Linha 48: Linha 49: Linha 50:} Linha 51: Linha 52: void protegido Application_BeginRequest (remetente do objeto, EventArgs e)

Arquivo de origem: d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs Linha: 50

Rastreio de Carga do Conjunto: As seguintes informações podem ser úteis para determinar por que o conjunto 'System.Web.Http, Versão = 4.0.0.0, Culture = Neutro, PublicKeyToken = 31bf3856ad364e35' não pôde ser carregado.

=== Informações do estado de pré-ligação === LOG: DisplayName = System.Web.Http, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 (totalmente especificado) LOG: Appbase = file: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/ LOG: PrivatePath inicial = D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ bin Chamando assembly: ThirdPartyWebAPI, Versão = 1.0.0.0, Cultura = neutra, PublicKeyToken = null. === LOG: Essa ligação é iniciada no contexto de carregamento padrão. LOG: usando o arquivo de configuração do aplicativo: D: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ web.config LOG: usando o arquivo de configuração do host: C: \ Users \ michalc \ Documents \ IISExpress \ config \ aspnet.config LOG: usando a configuração da máquina arquivo de C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. LOG: referência pós-política: System.Web.Http, versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 LOG: Tentativa de download de um novo arquivo de URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/ Arquivos ASP.NET temporários / root / 9184b2ea / c6d4b139 / System.Web.Http.DLL. LOG: Tentativa de download do novo arquivo de URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/ Arquivos ASP.NET temporários / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http .DLL. LOG: Tentativa de download do novo arquivo de URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: comparar o nome do assembly resultou na incompatibilidade: Versão principal ERR: falha ao concluir a instalação do assembly (hr = 0x80131040). Sondagem terminada. Tentativa de download do novo arquivo de URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/ Arquivos ASP.NET temporários / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . LOG: Tentativa de download do novo arquivo de URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: comparar o nome do assembly resultou na incompatibilidade: Versão principal ERR: falha ao concluir a instalação do assembly (hr = 0x80131040). Sondagem terminada. Tentativa de download do novo arquivo de URL: /// C: /Windows/Microsoft.NET/Framework/v4.0.30319/ Arquivos ASP.NET temporários / root / 9184b2ea / c6d4b139 / System.Web.Http / System.Web.Http.DLL . LOG: Tentativa de download do novo arquivo de URL: /// D: /SM/7.4Test/WebAPIServerV2/ThirdPartyWebAPI/bin/System.Web.Http.DLL. WRN: comparar o nome do assembly resultou na incompatibilidade: Versão principal ERR: falha ao concluir a instalação do assembly (hr = 0x80131040). Sondagem terminada. Falha ao concluir a instalação do conjunto (hr = 0x80131040). Sondagem terminada. Falha ao concluir a instalação do conjunto (hr = 0x80131040). Sondagem terminada.

Rastreio de pilha:

[FileLoadException: não foi possível carregar o arquivo ou assembly 'System.Web.Http, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou uma de suas dependências. A definição de manifesto da montagem localizada não corresponde à referência da montagem. (Exceção de HRESULT: 0x80131040)] ThirdPartyWebAPI.WebApiApplication.Application_Start () em d: \ SM \ 7.4Test \ WebAPIServerV2 \ ThirdPartyWebAPI \ Global.asax.cs: 50

[HttpException (0x80004005): não foi possível carregar o arquivo ou assembly 'System.Web.Http, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou uma de suas dependências. A definição de manifesto da montagem localizada não corresponde à referência da montagem. (Exceção de HRESULT: 0x80131040)]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext contexto, HttpApplication app) 9935033
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext contexto, MethodInfo- [] manipuladores) 118
System.Web.HttpApplication .InitSpecial (estado HttpApplicationState, manipuladores MethodInfo [], IntPtr appContext, contexto HttpContext) +172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, contexto HttpContext) +336
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +296

[HttpException (0x80004005): não foi possível carregar o arquivo ou assembly 'System.Web.Http, Versão = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou uma de suas dependências. A definição de manifesto da montagem localizada não corresponde à referência da montagem. (Exceção de HRESULT: 0x80131040)]
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +9913572 System.Web.HttpRuntime.EnsureFirstRequestInit (contexto HttpContext) +101 System.Web.HttpRuntime.ProcessRequestNonteification,


Informações sobre versão: Versão do Microsoft .NET Framework: 4.0.30319; Versão do ASP.NET: 4.0.30319.18408

Michal Asaf Carmeli
fonte
você tentou adicionar novamente a referência a 'System.Web.Http'
Izikon
4
Marque a resposta como aceita.
Aliostad 11/11

Respostas:

288

Corrigi isso reinstalando o pacote NuGet , que corrige dependências quebradas. No gerenciador de pacotes, execute:

Update-Package Microsoft.AspNet.WebApi -reinstall
Pathoschild
fonte
1
Executar o aplicativo Web localmente foi bom para mim (F5), mas ao implantar no servidor remoto (com WebDeploy), os assemblies não foram copiados para o servidor. Eu não tinha certeza se as assembléias deveriam ter sido copiadas ou não. De qualquer forma, depois de executar este comando todos os conjuntos necessários foram marcados com cópia-local = true e após a implantação do aplicativo começou a funcionar correctamente
Guillermo Ruffino
3
Apenas para adicionar uma imagem mais equilibrada - isso não resolveu o problema para mim.
Lewray
2
Certifique-se de adicionar a atualização necessária para quaisquer projetos dependentes, tais como testes, etc.
DeeArgee
Fiz isso e ele fez muitas alterações, mas notei que ajustava os redirecionamentos de ligação no web.config, descartei todas as outras alterações feitas e isso funcionou para mim.
Myster
agora estou recebendo um novo erro: a nova versão é Version = 5.2.3.0 e espera Version = 4.0.0.0
Yar
84

Para resolver o erro Não foi possível carregar o arquivo ou assembly 'System.Web.Http', use o NuGet para instalar o Web API 2.1 WebHost.

No Solution Explorer nas referências, clique com o botão direito do mouse e selecione gerenciar pacotes de nuget. (se não houver, instalar nuget)

insira a descrição da imagem aqui

Na janela Gerenciar pacotes NuGet, no lado esquerdo, clique on-line e, em cima, à direita, procure por Web Host e instale o Microsoft ASP.NET Web API 2.1 Web Host. (Uma vez instalado, o botão de instalação mudará para uma verificação verde)

Depois disso, o projeto será recarregado e, quando for compilado novamente, o erro será resolvido e o projeto será depurado e executado. O erro desapareceu e você pode ser 'O recurso não foi encontrado. Basta anexar o URL (ex: localhost: 52088 / para localhost: 52088api / products)

Sua pergunta foi boa e me ajudou.

Espero que esta resposta ajude!

Catto
fonte
Obrigado Catto, isso me curou muito.
Saurabh Soni
61

Você precisa adicionar redirecionamentos de montagem:

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

Provavelmente você precisará fazer isso para mais alguns assemblies, como hospedagem na web etc.

Aliostad
fonte
Eu editei a resposta. Por alguma razão, o nome da DLL foi Castle Windsor alterado para System.Web.Http.
Aliostad 26/10/2013
7
Você nunca deve adicionar redirecionamentos binários sem verificar se o novo assembly é compatível com o binário do anterior.
GETah
18

Ou você pode fazer isso no NuGet Package Manager Console

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

E então você poderá adicionar a referência ao System.Web.Http.WebHost 5.0

Sameer Alibhai
fonte
trabalhar para mim, basta instalar o pacote de instalação Microsoft.AspNet.WebApi
Djama
17

Quando instalei o Web Api 2.2, esse erro foi iniciado. Eu adicionei isso ao web.config e resolveu o meu problema.

  <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>
jhilden
fonte
1
O mesmo aqui em um projeto que era o Web Api 2.2 desde o início, ao publicar no Azure. O projeto funcionou bem localmente, mas no Azure recebi o erro do OP. A adição dessas linhas ao web.config e a republicação no Azure o corrigiram.
AronVanAmmers
4

Simplesmente comecei Copy Local = truea montagem que faltava e funcionou. Obviamente, isso acontece clicando com o botão direito do mouse na referência ausente (que é declarada na mensagem de erro) e selecionando propriedades; como abaixo:

insira a descrição da imagem aqui

Isso deve resolver um problema, pois pode haver mais de uma montagem causando o problema - o que fiz foi selecionar todas as montagens e clicar com o botão direito do mouse nelas; propriedades selecionadas; e defina todos para Copiar Local = true; e publique novamente.

t_plusplus
fonte
1
Funcionou perfeitamente. Eu só tinha que fazer "Copy Local = true" na System.Web.Http e System.Net.Http.Formatting
Sandip Subedi
4

A solução adequada para resolver esse problema é seguindo as etapas

. Atualize o Visual studio se você tiver uma versão mais antiga para 15.5.4 (Opcional)

  1. Remova todos os redirecionamentos de ligação do web.config

  2. Adicione isso ao arquivo csproj:

 <PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
  1. Construir.

  2. Na pasta bin, deve haver um (WebAppName).dll.configarquivo.

  3. Deveria ter redirecionamentos. Copie-os para o web.config

  4. Remova o snippet acima do arquivo csproj novamente

  5. Deveria funcionar

Detailed Blog

Sajeetharan
fonte
ele não criar todas as ligações
batmaci
3

Para mim, estava apenas travando com esse erro em um ambiente de produção, não em uma máquina local; o que resolveu foi excluir o conteúdo da pasta / bin e depois regenerá-lo novamente.

Oana
fonte
Isso é algo que as pessoas devem verificar. Eu estava tendo o mesmo problema. Aconteceu que havia uma dll desnecessária para Microsoft.AspNet.Cors no front-end do meu aplicativo. Eu tinha a pasta bin excluída nos sistemas de prod, republicada o site e mágica.
Ron
2

Apenas uma dica útil óbvia, mas possível ... lembre-se de verificar se a nova versão especificada na ligação de montagem do webconfig é a mesma versão que você faz referência nas referências do projeto. (ou seja, enquanto escrevo isso ... isso seria 5.1.0.0 se você tiver feito recentemente um NUGet no System.Web.Http

Jim Taliadoros
fonte
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.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Arvind Krmar
fonte
2

Isso pode ajudar alguém.

Eu decidi ir com o aplicativo MVC4.

executar projeto, trabalhou

Em seguida, instalamos alguns pacotes como,
API do Microsoft ASP.NET WEB 2.2 (4 pacotes)
Página da Ajuda do Microsoft ASP.NET WEB API 2.2 Página da Ajuda do
Microsoft ASP.NET WEB API 2.2 OWIN

executar o projeto, o mesmo erro mencionado na pergunta

Solução:

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


Problema resolvido


mas, em seguida, foi encontrado algum erro de hotfix . Para resolvê-lo, vá para a pasta VIEW do seu projeto MVC4, localize o arquivo second web.config e a versão alterada de 2.0.0.0 para 3.0.0.0, como mostrado abaixo.


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

micronyks
fonte
2

No meu caso, eu estava realmente sentindo falta dos meus web.config, que tinham os redirecionamentos de ligação apropriados. A restauração do web.configresolveu o erro.

Brandon Hawbaker
fonte
2

Eu poderia resolver um problema semelhante com o System.Net.HTTP adicionando referência de montagem no app.config do aplicativo principal.

  <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>
Parag Bangad
fonte
1

Eu encontrei a solução! Exclua a pasta denominada pacote no diretório do projeto e, em seguida, recrie para executá-lo.

Ashitosh birajdar
fonte
1
<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>
ravula sandeep
fonte
1

SIM!!!

Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Funciona bem no meu caso .... thnkz

X-Coder
fonte
2
Esta é apenas uma duplicata de uma resposta existente . Como parece que você não tem mais nada a acrescentar, considere remover este.
zzzzBov
1

Eu não fiz nada, apenas copiei DLLs da pasta Bin de desenvolvimento para a pasta Bin implantada on-line e funcionou bem para mim.

Anjan Kant
fonte
0

Como já foi dito, basta reinstalar o pacote MVC no seu projeto da Web usando o nuget, mas certifique-se de adicionar o pacote MVC a qualquer projeto, dependendo do projeto da Web, como testes de unidade. Se você criar cada projeto incluído individualmente, verá que os que precisam da atualização.

DeeArgee
fonte
0

Eu tive o mesmo problema e a reinstalação do pacote não funciona.

Meu aplicativo é executado no LocalIIS (não no IIS EXPRESS). Ativei o Assembly Load Trace e descobri que ele deseja carregar System.Web.Http load from below temp catche. então remova todas as pastas de captura nele.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Arquivos temporários do ASP.NET [meu aplicativo]

Mohammadreza
fonte
0

Resolvi esse problema revertendo as alterações que o nuget havia feito no meu web.configapós a execução nuget. Reverta as alterações para uma versão de trabalho anterior.

  <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>
roo2
fonte
0

O que resolveu o problema para mim foi reinstalar os pacotes OWIN da Página de Ajuda do Microsoft ASP.NET Web API 2.2 e do Microsoft ASP.NET Web API 2.2 . Reinstalei os dois ao mesmo tempo, mas acho que foi o primeiro que corrigiu o problema.

Tentei as primeiras soluções oferecidas aqui, mas isso não ajudou, então comparei minhas dependências com as de um projeto que funcionou (de um curso em Pluralsight) e as duas dependências acima eram de uma versão inferior (5.0.0 ), então atualizei-os para 5.2.3 e ele começou a funcionar.

lukegf
fonte
0

Eu tive isso de um serviço WCF. Para mim (como o problema estava sendo exibido no dev local), eu simplesmente tive que excluir o conteúdo da pasta bin na solução. A reconstrução funciona bem mais uma vez.

DubMan
fonte
0

Versão do ASP.NET: 4.0.30319.18408 pertence ao .Net4.5 e System.Web.Http Version = 4.0.0.0 é compatível com o .NET4.0. Portanto, as versões que você possui não são compatíveis. Você deve atualizar o System.Web.Http para a versão 5.0.0.0, que é compatível com .Net4.5

oscarMg
fonte
0

Eu tive uma questão semelhante. Tudo estava funcionando antes. Ele foi originalmente criado usando Web Forms e, posteriormente, foi adicionado API da Web para algumas coisas.

  • Tentei desinstalar, instalar e reinstalar o pacote Microsoft.AspNet.WebApi.
  • Tentei remover a pasta packages da solução e deixar o NuGet restaurar no VS.
  • Tentei remover referências de montagem individuais (em Referências) e reinstalar pacotes.
  • Tentei adicionar redirecionamentos de ligação à versão 5.2.3.0 no web.config mencionado em várias respostas. Nada funcionou para mim.

O que funcionou foi, no Visual Studio, alterar as configurações de perfil de publicação de Release para Debug. Estranho, mas foi o que funcionou. Então, compartilhando aqui.

joym8
fonte
0

Eu tive esse problema ao implantar no Azure usando o recurso Publicar. Lembre-se de limpar os arquivos no destino.

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

Isso resolveu meu problema, caso as pessoas tenham que procurar por isso como eu. Tudo estava na mesma versão do meu projeto / solução, mas não no destino em que eu estava implantando.

Shelby115
fonte
0

Se você usar vários projetos em uma solução e chamar o método em um projeto para outro, verifique se todos os projetos (chamados projeto e projeto de chamada) usam a 'System.Net.Http'versão exclusiva .

MohammadSoori
fonte
0

Altere o sinalizador de versão Specfic de true para false para a dll na referência

user2992715
fonte
0

Eu tive o mesmo problema com o System.Web.Http.WebHost, Versão = 5.2.6.0, sendo referenciado, mas o pacote NuGet mais recente era o 5.2.7.0. Editei os arquivos web.config, reinstalei o pacote NuGet e editei os arquivos de projeto do visual studio para todos os meus projetos para garantir que nenhuma referência ao 5.2.6.0 persistisse. Mesmo depois de tudo isso, o problema persistiu.

Em seguida, procurei na pasta bin o projeto que estava lançando a exceção, onde encontrei uma DLL para um dos meus outros projetos que não é uma dependência e nunca deveria estar lá. Excluí a DLL ofensiva (que foi compilada usando a versão 5.2.6.0 do System.Web.Http.WebHost), reconstruí o projeto problemático e agora está funcionando.

cghore
fonte