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

У меня есть небольшое веб-приложение. Которая работала нормально, пока я не добавил два 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 и С#. Я не использую MVC
На локальном хосте он работает нормально.
Но когда я размещаю опубликованный код, он дает мне вышеуказанную ошибку.

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

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

[InvalidOperationException: метод инициализации запуска перед запуском. Начало по типу System.Web.Http.WebHost.PreApplicationStartCode создало исключение со следующим сообщением об ошибке: Не удалось загрузить файл или сборку "Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Система не может найти указанный файл..]    System.Web.Compilation.BuildManager.InvokePreStartInitMethods(методы 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): метод инициализации запуска перед запуском. Начало в типе System.Web.Http.WebHost.PreApplicationStartCode создало исключение со следующим сообщением об ошибке: Не удалось загрузить файл или сборку" Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Система не может найти указанный файл..]    System.Web.HttpRuntime.FirstRequestInit(контекст HttpContext) +11697760    System.Web.HttpRuntime.EnsureFirstRequestInit(контекст HttpContext) +141    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, контекст HttpContext) +4866485

Ответ 1

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

Ответ 2

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

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

  • Выполните следующую команду в консоли диспетчера пакетов. (Если вы используете 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.
    
  • Вы заметите, что Microsoft.Web.Infrastructure.dll теперь добавлен в качестве ссылки (это можно увидеть в папке с ссылками в вашем проекте в Solution Explorer)

  • Если вы посмотрите на свойства этой ссылки, вы заметите, что " Скопировать локальную" по умолчанию установлено на " True".

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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/

Ответ 6

После установки 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

Это сработало для меня.

Ответ 7

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

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

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

Примечание. CopyLocal автоматически присваивается значение true.

Ответ 8

У меня была такая же проблема, и "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

Ответ 9

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

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

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

Ответ 10

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

Ответ 11

Столкнулся с той же проблемой, и, к сожалению, ничего здесь не было. Наконец, я наткнулся на эту ссылку: 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. Я думаю, что кто-то маскирует другого, что вызывает проблемы. В моем конкретном случае на моем сервере сборки мне нужно, чтобы он был скопирован в папку (эта папка затем зашифровывается и отправляется в развертывание). Я предполагаю, что система имела копию локально и просто подумала "нет, все будет хорошо"