Ошибка Microsoft.Web.Infrastructure, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35

92

У меня есть небольшое веб-приложение. Что работало нормально, пока я не добавил два genericHandler в свое приложение.

Я внес следующие изменения в обработчик 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.

Я использую asp.net4.0 и C #. Я не использую MVC.
На локальном хосте он работает нормально.
Но когда я размещаю опубликованный код, он дает мне указанную выше ошибку.

Трассировки стека:-

[FileNotFoundException: не удалось загрузить файл или сборку Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 или одну из их зависимостей. Системе не удается найти указанный файл.] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register () +0

[InvalidOperationException: метод инициализации перед запуском приложения Start с типом System.Web.Http.WebHost.PreApplicationStartCode вызвал исключение со следующим сообщением об ошибке: Не удалось загрузить файл или сборку Microsoft.Web.Infrastructure, Version = 1.0.0.0, Культура = нейтральный, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Система не может найти указанный файл ..] System.Web.Compilation.BuildManager.InvokePreStartInitMethods (методы ICollection`1) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465 System.Web.Hosting.InHostitialize (. ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLeve

[HttpException (0x80004005): метод инициализации перед запуском приложения Start для типа System.Web.Http.WebHost.PreApplicationStartCode вызвал исключение со следующим сообщением об ошибке: Не удалось загрузить файл или сборку Microsoft.Web.Infrastructure, Version = 1.0 .0.0, Культура = нейтральный, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Системе не удается найти указанный файл. +4866485

शेखर
источник
1
У меня сработала установка Microsoft.Web.Infrastructure.dll из пакета nuget.
ATUL SHARMA

Ответы:

197

Похоже, что Microsoft.Web.Infrastructure.dll не устанавливается в GAC, даже если .net (4.0 или 4.5 или другой) успешно установлены на Windows Server. На локальном хосте (обычно клиент Windows) кажется, что он находится в GAC, когда установлены инструменты / платформа (Visual Studio и т. Д.).

В качестве одного из возможных исправлений попробуйте следующее:

  1. Выполните следующую команду в консоли диспетчера пакетов. (Если вы используете Visual Studio, это может быть достигнуто через пункты меню «Инструменты -> Диспетчер пакетов библиотеки -> Консоль диспетчера пакетов :)

    PM> Install-Package Microsoft.Web.Infrastructure
    

    Вы увидите следующие сообщения, если он будет успешно установлен.

    Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
    Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
    
  2. Вы заметите, что Microsoft.Web.Infrastructure.dll теперь добавлен как ссылка (можно увидеть в папке ссылок вашего проекта в обозревателе решений)

  3. Если вы посмотрите на свойства этого справочника, то заметите, что для параметра « Копировать локально » по умолчанию установлено значение « Истина ».

  4. Теперь, когда вы «публикуете» свой проект, будет развернут Microsoft.Web.Infrastructure.dll .

Rockyb
источник
2
Спасибо, что решили мою проблему! Я использовал контроллер WebApi в своем приложении Webforms, и развертывание не удалось из-за упомянутого сообщения об ошибке. Добавив ссылку на мой проект и скопировав .dll, я смог заставить его работать.
magnattic
1
Сначала я попытался пройти через интерфейс «Управление пакетами NuGet для этого решения», но он просто сказал, что Microsoft.Web.Infrastructure.dll уже установлен, хотя я нигде не видел ссылки на него. Запустив вашу командную строку, я смог установить поверх, увидеть ссылку, настроить копирование локально, повторно развернуть ... исправлено. Благодарность!!
hardba11
1
Я установил с помощью диспетчера пакетов, но он уже установлен. Но ссылки на проект я не увидел. Итак, я добавил сам и установил для Copy Local значение True =)
Акира Ямамото
27
Обратите внимание, что в некоторых случаях вы получаете сообщение «Webapp уже имеет ссылку на« Microsoft.Web.Infrastructure 1.0.0.0 ».». В таких случаях используйте «Обновить-пакет Microsoft.Web.Infrastructure -Reinstall».
Робба
1
Я уже установил его, но для параметра «Копировать локально» было установлено значение false. Изменив его на true, исправлено! Спасибо
Lyall
19

Я установил MVC4 через WPI, и это мне помогло.

Алексей Шиба
источник
1
Это сработало для меня, так как моя проблема была на сервере, но не на моей машине.
Джон
14

У меня такая же проблема. Когда я попробовал принятый ответ (rockyb), я получил сообщение о том, что пакет уже установлен и назначен моему проекту. Однако, когда я проверил список ссылок, на него НЕ ссылались.

Microsoft.Web.Infrastructure была установлена ​​в папке пакетов моего решения. Вместо использования NuGet для добавления пакета я просто использовал опцию «Добавить ссылку». В левой части всплывающего окна я выбрал «Обзор», а затем нажал кнопку «Обзор» в нижней части окна. Я перешел в папку пакетов в папке, в которой находилось мое решение, затем развернулся до ... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 и щелкнул Microsoft.Web.Infrastructure .dll. После нажатия кнопки ОК пакет появился в моем списке ссылок. Я использовал опцию Web Deploy Package для развертывания моего сайта, и все заработало.

Гленн Гордон
источник
1
Деньги. Поскольку этот ответ появился недавно, а принятый (который у меня тоже не сработал) настолько стар, я предполагаю, что это как-то связано с обновленной версией Visual Studio. Благодарность!
chiliNUT
1
Как сказал Робба в комментарии к другому ответу, вы можете решить проблему отсутствия его в списке ссылок (но пакет установлен) с помощью: «Update-Package Microsoft.Web.Infrastructure -Reinstall». Думаю, это лучше, чем искать сборку.
Джим В. просит восстановить Монику
9

Почему бы не скопировать файл Microsoft.Web.Infrastructure.dll вручную в папку BIN сервера. Это работает для. Мой проект - VS2010 Website.

Этот файл может быть расположен:

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40

Просто скопируйте и вставьте его в папку BIN.

Вероятно, вам нужно включить это в web.config, если у вас его еще нет

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

Ссылка: http://thedeveloperblog.com/

BenW
источник
6

Я нашел проблему. Вместо того, чтобы (.cs)по ошибке добавить файл класса , я добавил Web API Controllerкласс, который добавил файл конфигурации в мое решение. И этот файл конфигурации искал упомянутую DLL (Microsoft.Web.Infrastructure 1.0.0.0). Это сработало, когда я удалил этот файл, очистил приложение и затем опубликовал.

शेखर
источник
4

После установки Microsoft.Web.Infrastructure через Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Скопируйте файл Microsoft.Web.Infrastructure.dllвручную из Nuget-Packageпапки веб-приложения, а затем вставьте его в папку bin вашего веб-приложения, развернутого на веб-сервере.

пакеты \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll

У меня это сработало.

Гокульнатх
источник
Uninstall-Package Microsoft.Web.Infrastructure (затем проверьте любые изменения при использовании Team Foundation Server), затем Install-Package Microsoft.Web.Infrastructure работал у меня.
GJKH
3
иногда взлом - единственный способ заставить продукт Microsoft
заработать
Это сработало и для меня. да, это был взлом, но он сэкономил много времени. как он автоматически удаляется из корзины - загадка
Химаншу Бхалла
4

Update-Package -reinstall Microsoft.Web.Infrastructure у меня не работало, так как я продолжал получать ошибки, что он уже установлен.

Мне пришлось перейти в папку Microsoft.Web.Infrastructure.1.0.0.0 в папке пакетов и вручную удалить эту папку.

После этого запустив Install-Package Microsoft.Web.Infrastructure его.

Примечание: CopyLocalбыло автоматически установлено значение true.

контакты
источник
в моем случае не сработало. Я удаляю папку инфраструктуры из пакетов и снова устанавливаю пакет
Heemanshu Bhalla
0

У меня была та же проблема, и «Microsoft.Web.Infrastructure.dll», похоже, отсутствовал. Я попробовал несколько советов и установил MVC и т.д., и ничего не помогло. Решением было установить «Улучшения веб-служб (WSE) 1.0 SP1 для Microsoft .NET», который включает Microsoft.Web.Infrastructure.dll. Доступно по адресу: http://www.microsoft.com/en-gb/download/details.aspx?id=4065.

Злы-Злы
источник
0

У меня такая же проблема. Я попытался установить Visual Studio 2010 SP1, но это не сработало.

В итоге я получаю от коллеги Microsoft.Web.Infrastructure.dll. Вы можете найти dll на своем компьютере друзей, на котором проект отлично работает. Попробуйте поискать dll в Temp / Temporary ASP.NET Files. Перейдите к Temp, используя% temp% в окне выполнения.

После загрузки dll на компьютер просто добавьте ссылку на свой проект, и он заработает.

Анкит
источник
0

Повторная публикация сайта устранила проблему для меня.

PhillyNJ
источник
0

Столкнулся с той же проблемой, и, к сожалению, здесь ничего не работало. Наконец, я наткнулся на эту ссылку: https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/

Оказывается, решение довольно глупое: установите для copy-local для dll microsoft.web.infrastructure значение False, затем снова установите значение True.

Кстати, я думаю, что происходит две версии dll microsoft.web.infrastructure, одна из которых предварительно установлена ​​в GAC, а другая - теперь пакет nuget. Я думаю, что одно маскирует другое, что вызывает проблемы. В моем конкретном случае на моем сервере сборки мне нужно скопировать его в папку (затем эта папка архивируется и отправляется для развертывания). Я думаю, у системы была локальная копия, и я просто подумал: «Нет, все будет хорошо»

information_interchange
источник
0

У меня есть веб-сайт только для файлов. Добавлен MVC 5 в приложение веб-форм (таргетинг на net45). Мне пришлось изменить файл packages.config

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

к

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

чтобы он запускался на локальном компьютере в режиме отладки (ранее была описанная выше ошибка). Запуск VS 2017 в Windows 7 ... открытие через Файл> Открыть> Веб-сайт> Файл (выберите корневой каталог вне IIS).

Beau
источник
0

У меня была такая же проблема после обновления кучи пакетов NuGet.
Я пробовал все виды удаления, очистки и повторной установки, описанные здесь, но безрезультатно. В ссылках не было Microsoft.Web.Infrastructure, хотя диспетчер NuGet показал, что он был установлен.

Проблема решилась заменой:

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

с участием

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

в packages.config. По всей видимости, виноват "net45".

Hong
источник