Я создал веб-проект, и он хорошо работает в Visual Studio. Однако после публикации на веб-сайтах azure я получил следующую ошибку. Что может вызвать проблему?
Не удалось загрузить файл или сборку System.Web.Http.WebHost, Version = 5.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 или одну из их зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека, чтобы получить дополнительную информацию об ошибке и ее происхождении в коде.
Сведения об исключении: System.IO.FileLoadException: не удалось загрузить файл или сборку System.Web.Http.WebHost, Version = 5.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 или одну из его зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Ошибка источника:
Необработанное исключение было создано во время выполнения текущего веб-запроса. Информацию о происхождении и местонахождении исключения можно определить с помощью трассировки стека исключений ниже.
Отслеживание загрузки сборки: следующая информация может помочь определить, почему сборка «System.Web.Http.WebHost, Version = 5.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35» не может быть загружена.
WRN: ведение журнала привязки сборки выключено. Чтобы включить ведение журнала сбоев привязки сборок, установите для параметра реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) значение 1. Примечание. С ведением журнала сбоев привязки сборок связано некоторое снижение производительности. Чтобы отключить эту функцию, удалите значение реестра [HKLM \ Software \ Microsoft \ Fusion! EnableLog].
Следующее - часть файла web.config.
<system.web>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers></system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Copy Local
уже правда. Странно показываетRuntime Version
v4.0.30319 вместо v5?Если вы все еще ищете ответ, попробуйте проверить эту ветку вопросов . Это помогло мне решить аналогичную проблему.
edit: Решение, которое помогло мне, заключалось в запуске
Update-Package Microsoft.AspNet.WebApi -reinstall
из диспетчера пакетов NugGet, как было предложено Pathoschild. Затем мне пришлось удалить мой файл .suo и перезапустить VS, как предложил Сергей Осипчук в этой теме .источник
Я столкнулся с той же проблемой и решил ее, установив
CopyLocal
значение true для следующих библиотек:System.Web.Http.dll System.Web.Http.WebHost.dll System.Net.Http.Formatting.dll
Я должен добавить, что использую MVC4 и NET 4
источник
У меня сработало добавление следующего раздела в
web.config
файл:<configuration> ... <runtime> ... <dependentAssembly> <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" /> </dependentAssembly> ... </runtime> ... </configuration>
Этот пример обозначает MVC 5.1. Надеюсь, это поможет кому-то решить эту проблему.
источник
Microsoft.AspNet.WebApi.WebHost
пакет через nuget.Для меня это начало работать после выбора «Удалить дополнительные файлы в месте назначения» в параметрах публикации файлов в настройках диалогового окна публикации.
источник
DLL отсутствует в опубликованной (развернутой среде). По этой причине он работает в локальной среде, то есть в Visual Studio, но не в среде веб-сайта Azure.
Просто сделайте Copy Local = true в свойствах сборки (System.Web.Http.WebHost), а затем выполните повторное развертывание, все должно работать нормально.
источник
Я использую vs2012, и я думаю, что обновление KB2781514 изменило некоторые настройки. Весь мой System.Web.Http в моем проекте MVC4 изменился на false, и я продолжаю получать это сообщение. Я изменил
All file in this project
свойство публикации, но оно не работает. Наконец-то пришлось менятьCopy Local = true
по одному и решил эту проблему.источник
У меня такая же ошибка, и я изменил свою версию с 4 на 3, и она решена:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <!-- Ensure correct version of MVC --> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> </dependentAssembly> </assemblyBinding>
источник
У меня была такая же проблема в моем приложении.
System.web.http.webhost not found.
Вам просто нужно скопировать
system.web.http.webhost
файл из вашего основного проекта, который вы запускаете в Visual Studio, и вставить его вbin
каталог опубликованного проекта .После этого он может показать ту же ошибку, но имя каталога будет изменено, это может быть
system.web.http
. Выполните ту же процедуру, что и выше. Он заработает после того, как все файлы будут загружены. Это связано с тем, что пакет nuget в Visual Studio загружается из Интернета, но на сервере он не может его загрузить.Вы можете найти этот файл в каталоге вашего проекта
bin
.источник
Это случилось со мной на VS2013 (обновление 5) /ASP.NET 4.5 в рамках типа проекта «Веб-приложение», которое включает MVC и веб-API 2. Ошибка произошла сразу после создания проекта и до добавления любого кода. Добавление следующей конфигурации исправит это для меня. После устранения проблемы «System.Web.Helpers» возникли еще две похожие ошибки для «System.Web.Mvc» и «System.Web.WebPages».
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> </dependentAssembly>
источник
Мне не хватало нескольких DLL. Даже если я вручную скопирую их в каталог при следующей публикации, они исчезнут. Каждый из них уже был настроен на локальное копирование в VS. Для меня исправление заключалось в том, чтобы установить для каждого из них значение «Копировать локально false», «сохранить», «построить», а затем установить для каждого из них локальное копирование true. На этот раз, когда я опубликовал, все библиотеки DLL опубликованы правильно. Странный
источник
Если у вас есть несколько проектов в вашем решении, и один из ваших проектов не может быть построен из-за этой ошибки, убедитесь, что вы установили пакет nuget WebApi Core в этом проекте. Простое добавление ссылки на System.Web.Http не помогает, вам необходимо установить правильный пакет nuget в этот проект.
В моем решении было несколько проектов, а WebApi Core уже был установлен в другом проекте. Я сослался на сборку System.Web.Http, щелкнув правой кнопкой мыши и отметив сборку в списке, и она не сработала в Azure, хотя локально все будет нормально. Мне пришлось удалить справочную информацию и добавить пакет nuget WebApi Core в каждый проект, которому требовалась ссылка на сборку.
источник
В случае, если "Copy Local" уже имеет значение True, я иногда считаю, что это сработает, если вы удалите файлы, в которых он был опубликован, и опубликуете снова.
Например, если вы используете IIS, удалите веб-сайты и содержимое каталога, в котором они опубликованы, и опубликуйте снова.
В месте назначения могут быть более старые версии файлов, поэтому, чтобы убедиться, что вы не используете старые версии, удалите все перед повторной публикацией.
источник
Я удалил следующую запись из web.config, и у меня она сработала.
<dependentAssembly> <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" /> <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" /> </dependentAssembly>
источник
Убедитесь, что версия пакета одинакова во всем решении. Я просто понизил и обновил
Microsoft.AspNet.Mvc
пакет решения, и проблема решена.источник