Erro Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35


92

Eu tenho um pequeno aplicativo da web. O que estava funcionando bem até eu adicionar dois genericHandler ao meu aplicativo.

Eu fiz as seguintes alterações para o manipulador http

 <system.web>
    <authentication mode="Forms" >
        <forms protection="All" timeout="720" defaultUrl="Default.aspx" loginUrl="Login.aspx" >
        </forms>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>
    <compilation debug="true" targetFramework="4.0" />

    <httpHandlers>
        <!--Code Log Handler-->
        <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendOWA" path="SendOWA.ashx" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendSOS" path="SendSOS.ashx" />
    </httpHandlers>
    <customErrors mode="Off">
        <error statusCode="404" redirect="Templates/PageNotFound.html" />
    </customErrors>
</system.web>
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <!--Code Log Handler-->
        <add name="LogHandler1" path="SendOWA.ashx" verb="*" type="InfoDomeNewUI.Handler.SendOWA"/>
        <!-- SMS SENDER-->
        <add name="SendSOS" path="SendSOS.ashx" verb="*" type="InfoDomeNewUI.Handler.SendSOS"/>
    </handlers>
</system.webServer>

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Estou usando asp.net4.0 e C #. Não estou usando MVC
no host local, ele está funcionando bem.
Mas quando estou hospedando o código publicado, estou apresentando o erro acima.

Rastreamento de pilha: -

[FileNotFoundException: Não foi possível carregar o arquivo ou assembly 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register () +0

[InvalidOperationException: O método de inicialização do pré-aplicativo Start no tipo System.Web.Http.WebHost.PreApplicationStartCode lançou uma exceção com a seguinte mensagem de erro: Não foi possível carregar o arquivo ou assembly 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.] System.Web.Compilation.BuildManager.InvokePreStartInitMethods (métodos ICollection`1) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465 System.Web.Hosting.HostingEnvironment.Initialize ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLeve

[HttpException (0x80004005): O método de inicialização pré-aplicativo Start no tipo System.Web.Http.WebHost.PreApplicationStartCode lançou uma exceção com a seguinte mensagem de erro: Não foi possível carregar o arquivo ou assembly 'Microsoft.Web.Infrastructure, Version = 1.0 .0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado ..] System.Web.HttpRuntime.FirstRequestInit (HttpContext context) +11697760 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotcontentification, IISContext +4866485


1
Instalar Microsoft.Web.Infrastructure.dll do pacote nuget funcionou para mim.
ATUL SHARMA

Respostas:


197

Parece que Microsoft.Web.Infrastructure.dll não está sendo instalado no GAC, mesmo se .net (4.0 ou 4.5 ou outro) for instalado com êxito no Windows Server. No localhost (geralmente cliente Windows), parece que está no GAC quando as ferramentas / plataforma (Visual Studio etc.) são instaladas.

Como uma solução possível, tente o seguinte:

  1. Execute o seguinte comando no console do gerenciador de pacotes. (Se você estiver usando o Visual Studio, isso pode ser alcançado por meio das opções de menu "Ferramentas -> Gerenciador de Pacotes de Biblioteca -> Console do Gerenciador de Pacotes :)

    PM> Install-Package Microsoft.Web.Infrastructure

    Você verá as seguintes mensagens se ele for instalado com sucesso.

    Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
    Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
  2. Você notará que Microsoft.Web.Infrastructure.dll foi adicionado como uma referência (pode ser visto na pasta de referências do seu projeto no Solution Explorer)

  3. Se você observar as propriedades desta referência, notará que " Copiar Local " foi definido como " Verdadeiro " por padrão.

  4. Agora, quando você "Publicar" seu projeto, o Microsoft.Web.Infrastructure.dll será implantado.


2
Obrigado, isso resolveu meu problema! Eu estava usando um controlador WebApi em meu aplicativo Webforms e a implantação falhou devido à mensagem de erro mencionada. Adicionando a referência ao meu projeto e copiando o arquivo .dll, consegui fazer com que funcionasse.
magnático

1
Inicialmente, tentei acessar a interface "Gerenciar pacotes NuGet para esta solução", mas ela simplesmente disse que o Microsoft.Web.Infrastructure.dll já estava instalado, embora eu não pudesse ver uma referência a ele em lugar nenhum. Ao executar sua linha de comando, fui capaz de instalar por cima, ver uma referência, definir para copiar local, reimplementar ... corrigido. Obrigado!!
hardba11

1
Instalei com o Gerenciador de Pacotes, mas já estava instalado. Mas não consegui ver a referência no projeto. Então, eu mesmo adicionei e defini Copiar Local como Verdadeiro =)
Akira Yamamoto

27
Observe que, em alguns casos, você recebe a mensagem "Webapp já tem uma referência a 'Microsoft.Web.Infrastructure 1.0.0.0'.". Use "Update-Package Microsoft.Web.Infrastructure -Reinstall" nesses casos.
Robba

1
Eu já tinha instalado, mas 'Copiar local' foi definido como falso. Mudar para verdadeiro consertou! Obrigado
Lyall

19

Instalei o MVC4 via WPI e me ajudou.


1
Este funcionou para mim, pois meu problema estava no servidor, mas não na minha máquina.
John

14

Eu tive o mesmo problema. Quando tentei a resposta aceita (rockyb), recebi a mensagem de que o pacote já estava instalado e atribuído ao meu projeto. Quando verifiquei a lista de referências, ela NÃO foi referenciada, no entanto.

O Microsoft.Web.Infrastructure foi instalado na pasta de pacotes da minha solução. Em vez de usar o NuGet para adicionar o pacote, apenas usei a opção Adicionar Referência. No lado esquerdo da janela pop-up, escolhi Procurar e, em seguida, pressionei o botão Procurar na parte inferior da janela. Naveguei até a pasta de pacotes dentro da pasta em que minha solução estava, depois fui até ... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 e cliquei em Microsoft.Web.Infrastructure .dll. Após clicar em OK, o pacote apareceu na minha lista de Referências. Usei a opção Web Deploy Package para implantar meu site e tudo funcionou.


1
Dinheiro. Como essa resposta é tão recente e a aceita (que também não funcionou para mim) é tão antiga, presumo que isso tenha algo a ver com uma versão atualizada do Visual Studio. Obrigado!
chiliNUT

1
Como Robba disse em um comentário sobre uma resposta diferente, você pode resolver o problema de ele não estar na lista de referências (mas o pacote está instalado) com: "Update-Package Microsoft.Web.Infrastructure -Reinstall". Acho que é melhor do que navegar pela montagem.
Jim W diz restabelecer Monica em

9

Por que não copiar o arquivo Microsoft.Web.Infrastructure.dll manualmente para a pasta BIN do servidor. Isso funciona para. Meu projeto é o site VS2010.

Este arquivo pode ser localizado:

C: \ Arquivos de programas (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40

Basta copiar e colar na pasta BIN.

Você provavelmente precisará incluir isso no web.config se ainda não o tiver

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Referência: http://thedeveloperblog.com/


6

Eu encontrei o problema. Em vez de adicionar um (.cs)arquivo de classe por engano, eu adicionei uma Web API Controllerclasse que adicionou um arquivo de configuração à minha solução. E esse arquivo de configuração estava procurando a DLL mencionada (Microsoft.Web.Infrastructure 1.0.0.0). Funcionou quando removi o arquivo, limpei o aplicativo e publiquei.


4

Depois de instalar o Microsoft.Web.Infrastructure por meio de Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Copie Microsoft.Web.Infrastructure.dllmanualmente da Nuget-Packagepasta em seu aplicativo da web e cole-o na pasta bin do seu aplicativo da web implementado no servidor da web.

packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll

Funcionou para mim


Desinstalar o Pacote Microsoft.Web.Infrastructure (em seguida, verifique as alterações se estiver usando o Team Foundation Server) e o Install-Package Microsoft.Web.Infrastructure funcionou para mim.
GJKH

3
às vezes hackear é a única maneira de fazer um produto da microsoft funcionar
eagor

Isso funcionou para mim também. sim, foi um hack, mas economizou muito tempo. como ele foi excluído automaticamente do bin é um mistério
Heemanshu Bhalla

4

Update-Package -reinstall Microsoft.Web.Infrastructure não funcionou para mim, pois sempre recebia erros de que ele já estava instalado.

Tive que navegar até a pasta Microsoft.Web.Infrastructure.1.0.0.0 na pasta de pacotes e excluir manualmente essa pasta.

Depois de fazer isso, execute o Install-Package Microsoft.Web.Infrastructureinstalou.

Nota: CopyLocalfoi automaticamente definido como verdadeiro.


não funcionou no meu caso. excluo a pasta de infraestrutura dos pacotes e do pacote instalado novamente
Heemanshu Bhalla

0

Eu tive o mesmo problema e o "Microsoft.Web.Infrastructure.dll" parecia estar faltando. Tentei alguns conselhos e instalei MVC`s etc. e nada ajudou. A solução foi instalar o "Web Services Enhancements (WSE) 1.0 SP1 para Microsoft .NET", que inclui Microsoft.Web.Infrastructure.dll. Disponível em: http://www.microsoft.com/en-gb/download/details.aspx?id=4065


0

Eu tive o mesmo problema. Tentei instalar o Visual Studio 2010 SP1, mas não funcionou.

Finalmente, recebo Microsoft.Web.Infrastructure.dll de um colega. Você pode encontrar a dll no PC de seu amigo, onde o projeto está funcionando perfeitamente. Tente pesquisar dll em arquivos temporários / temporários do ASP.NET. Vá para Temp usando% temp% na janela de execução.

Depois de colocar a dll em seu pc, basta adicionar referência ao seu projeto e ele funcionará.


0

A republicação do site resolveu o problema para mim.


0

Estava enfrentando o mesmo problema e infelizmente nada aqui estava funcionando. Finalmente, encontrei este link: https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/

Acontece que a solução é meio idiota: defina o local de cópia da dll microsoft.web.infrastructure como False e, em seguida, defina-o novamente como True.

A propósito, acho que o que está acontecendo é que existem duas versões da dll microsoft.web.infrastructure, uma pré-instalada no GAC e outra que agora é um pacote nuget. Acho que um está mascarando o outro, causando problemas. No meu caso específico, no meu servidor de compilação, preciso copiá-lo para uma pasta (essa pasta é compactada e enviada para a implantação). Acho que o sistema tinha uma cópia localmente e apenas pensei "nah, vai ficar tudo bem"


0

Eu tenho um site somente de arquivos. Adicionado MVC 5 ao aplicativo de webforms (visando net45). Tive que modificar o packages.config

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45"

para

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" developmentDependency="true"

para que ele inicie na caixa local no modo de depuração (anteriormente tinha o erro descrito acima). Executando o VS 2017 no Windows 7 ... aberto em Arquivo> Abrir> Site> Arquivo (escolha o diretório raiz fora do IIS).


0

Tive o mesmo problema depois de atualizar vários pacotes NuGet.
Eu tentei todos os tipos de deleção, limpeza, resintalling descritos aqui e sem sucesso. As referências não continham Microsoft.Web.Infrastructure apesar do gerenciador NuGet ter mostrado que estava instalado.

O problema foi resolvido substituindo:

  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />

com

  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />

em packages.config. O culpado é aparentemente "net45".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.