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