Не удалось загрузить файл или сборку Microsoft.Web.Infrastructure,

79

Я попытался загрузить свой веб-сайт на сервер. Он отлично работал с моим локальным хостом, поэтому я загрузил все из своей wwwrootпапки localhost на сервер и изменил строку подключения.

Но есть такая ошибка:

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: The pre-application start initialization method Start on type RouteDebug.PreApplicationStart threw an exception with the following error message: 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..
   at System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)

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.
   at RouteDebug.PreApplicationStart.Start()

Проект был nopcommerce.

Что нужно сделать, чтобы исправить эту ошибку?

user1348351
источник
копирование, вероятно, не сработало, потому что на хосте не установлены такие же зависимости, ознакомьтесь с этим руководством: iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio
Майк Трусов

Ответы:

57

Вам нужно будет включить dll в свой проект и добавить ссылку на нее.

Вот ссылка на аналогичную проблему уже в стеке : Проблемы зависимости развертывания MVC3

Колин Груша
источник
Нужно также загрузить флудер "_bin_deployableAssemblies" на сервер ??
user1348351
Есть несколько разных способов справиться с этим, и это также зависит от того, как вы развертываете. Но если вы щелкните ссылку в моем сообщении, а затем просмотрите блог в верхнем ответе с галочкой, вы увидите, что если вы правильно настроите его, dll из _bin_deployableAssemblies должны быть автоматически обработаны, когда вы делаете развертывание (или веб-развертывание). Вот ссылка на упомянутый мной блог.
Colin Pear
5
Блог, на который следует эта ссылка, больше не доступен. Этот ответ - stackoverflow.com/a/12683392/137474 работал у меня.
Baldy
@ColinPear, Большое спасибо, именно то, что я искал. У меня было приложение для электронной коммерции, которое просило об этом !.
PatsonLeaner 04
в моем случае мой сайт работает в plesk без "Microsoft.Web.Infrastructure.dll", но при переходе на cpanel эта ошибка показала!
Omid-RH
39

Оказывается, после выполнения эталонной очистки он был удален Microsoft.Web.Infrastructure, но не из файла packages.config. После попытки добавить его снова с помощью Package Manager ConsoleVisual Studio сообщает, что он уже установлен, что неверно, поскольку оно было удалено.

Затем я удалил строку кода в packages.configфайле

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

и снова запустил команду

PM> Install-Package Microsoft.Web.Infrastructure

После этого теперь все работает нормально.

Риан де Ланге
источник
32

Установка AspNetMVC3ToolsUpdateSetup, загруженная отсюда , решит эту проблему без добавления ссылки

Сгуриджала
источник
28

Несмотря на количество ответов, я добавлю еще один, который, ИМХО, проясняет ситуацию.

Как уже упоминали Роб и wrightmailMicrosoft.Web.Infrastructure , это пакет NuGet (ссылка не нужна, она у вас есть в диспетчере пакетов NuGet).

Судя по всему, на него ссылался ваш проект и он внезапно исчез. Может существовать ряд причин, но важно то, что, несмотря на то, что вы, возможно, включили автоматическое восстановление пакетов в Visual Studio :

  • Управление пакетами NuGet для решения (контекстное меню в обозревателе решений),
  • Разрешить NuGet загружать недостающие пакеты (настройки),
  • Автоматически проверять отсутствие пакетов во время сборки в Visual Studio (настройки),

для некоторых пакетов может потребоваться переустановка вручную. Я не знаю, что смущает NuGet, возможно, вручную удаляет ссылку, но вот решение, которое я обычно применяю в таких случаях. Следующая консоль PM помогает восстановить пакет с сохранением исходной версии (без обновления до возможно существующей новой):

Обновление-Пакет Microsoft.Web.Infrastructure -Переустановить

Сохранение версии может потребоваться, если вы не хотите случайно перезаписать существующий пакет более новой версией, которая, возможно, удаляет «старые» функции, которые вы могли использовать в своем проекте.

И в качестве доказательства того, что версия не меняется, хоть и немного длинновато, вот результат выполнения команды:

PM> Update-Package Microsoft.Web.Infrastructure -Reinstall
Attempting to gather dependencies information for multiple packages with respect to project 'Samples.NuGet\DemoApp\DemoApp', targeting '.NETFramework,Version=v4.5.2'
Attempting to resolve dependencies for multiple packages
Resolving actions install multiple packages
...
Package removal starts here...
...
Removed package 'Microsoft.AspNet.Web.Optimization 1.1.3' from 'packages.config'
Successfully uninstalled 'Microsoft.AspNet.Web.Optimization 1.1.3' from DemoApp
Removed package 'WebGrease 1.5.2' from 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\uninstall.ps1'
Successfully uninstalled 'WebGrease 1.5.2' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Microsoft.Web.Infrastructure 1.0.0.0' from 'packages.config'
Successfully uninstalled 'Microsoft.Web.Infrastructure 1.0.0.0' from DemoApp
...
More package removals here. Omitted for brevity...
...
Removed package 'Antlr 3.4.1.9004' from 'packages.config'
Successfully uninstalled 'Antlr 3.4.1.9004' from MvcLenseApp
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
--- Install packages (in reverse order) ---
Package 'Antlr.3.4.1.9004' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Antlr.3.4.1.9004' to 'packages.config'
Successfully installed 'Antlr 3.4.1.9004' to DemoApp
...
More package installs here. Omitted for brevity...
...
Package 'Microsoft.Web.Infrastructure.1.0.0' already exists in folder 'D:\Projects\Lense.Mvc5\packages'
Added package 'Microsoft.Web.Infrastructure.1.0.0' to 'packages.config'
Successfully installed 'Microsoft.Web.Infrastructure 1.0.0' to MvcLenseApp
...
More package installs here. Omitted for brevity...
...
Package 'WebGrease.1.5.2' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'WebGrease.1.5.2' to 'packages.config'
Executing script file 'D:\Projects\DemoApp\packages\WebGrease.1.5.2\tools\install.ps1'
Successfully installed 'WebGrease 1.5.2' to DemoApp
Package 'Microsoft.AspNet.Web.Optimization.1.1.3' already exists in folder 'D:\Projects\DemoApp\packages'
Added package 'Microsoft.AspNet.Web.Optimization.1.1.3' to 'packages.config'
...
End of package re-install. 
...
Successfully installed 'Microsoft.AspNet.Web.Optimization 1.1.3' to DemoApp
PM> 

Конечно, если вы хотите переустановить все пакеты, вам может потребоваться ознакомиться с командами обновления / установки в NuGet здесь и здесь .

Александр Христов
источник
27

Я обнаружил, что, несмотря на то, что он работал на моем устройстве для разработчиков, сборка не была добавлена ​​в проект. Найдите Microsoft.Web.Infrastructure в NuGet и установите его оттуда. Затем убедитесь, что выбрано Копировать локально.

jwrightmail
источник
1
Та же проблема, это было на CopyLocal = True, не знаю, почему это не сработало. Ваше решение решило мою проблему :)
GôTô
6

Возникла эта проблема на новом компьютере с Windows 10 на VS2015 с существующим проектом. Диспетчер пакетов 3.4.4. Восстановление пакетов включено.

Восстановление работает не полностью. Пришлось запустить следующее в командной строке диспетчера пакетов

Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall

Это внесло следующие изменения в мой файл решения, которые НЕ выполнялись при восстановлении.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Простое добавление перечисленных выше элементов в раздел ItemGroup в файле решения ТАКЖЕ решит проблему при условии, что существует .. \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll.

Проще просто выполнить -Reinstall, но хорошо понимать, что он делает по-другому с восстановлением пакета.

Рохан
источник
У меня такая же проблема. Пробовал «Восстановить пакеты nuget» из контекстного меню решения. На выходе было сказано, что восстанавливать нечего. Следуя вашему совету, я запустил Update-Package -ProjectName «имя моего проекта здесь» из консоли диспетчера пакетов, и все пакеты были добавлены правильно
Роб Боуман,
@RobBowman Отличный Роб. В вашем случае это может не иметь значения, но будьте осторожны, включив также флаг -Reinstall. Это гарантирует, что вы получите те же версии пакетов, что и раньше. Если вы опустите этот флаг, он обновит ваш пакет до последней версии, что может вызвать проблемы, если вы не собирались этого делать. См. Здесь docs.microsoft.com/en-us/nuget/tools/ps-ref-update-package
Рохан,
5

Resharper обнаружил Microsoft.Web.Infrastructure как неиспользуемую ссылку, поэтому я удалил ее. Локально все работало нормально, но после публикации в dev я получил ту же ошибку.

Заключение, будьте осторожны при удалении ссылок, отмеченных как неиспользуемые Resharper

Хавьер
источник
Именно это я и сделал.
AndreFeijo
в моем случае мой сайт работает в plesk без "Microsoft.Web.Infrastructure.dll", но при переходе на cpanel эта ошибка показала!
Omid-RH
3

У меня была аналогичная проблема. NuGet показал, что пакет успешно установлен, но ссылка в мой проект не добавлена.

Запуск <PM> Install-Package Microsoft.Web.InfraStructureтакже не помог, поскольку менеджер пакетов все время говорил, что он уже установлен

Наконец, я добавил его вручную, отредактировав файл csproj и добавив следующие строки:

 <Reference Include="Microsoft.Web.Infrastructure">
  <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
  <Private>True</Private>
</Reference>

Это решило проблему.

память о мечте
источник
Я проверил файл csproj, и он ссылался на папку, которая вызывала проблему. Удаление этого дополнительного имени папки решило мою проблему
superachu
2

Вам необходимо загрузить платформу ASP.NET MVC на сервер, на котором размещено ваше приложение. Это быстрое исправление, просто скачайте и установите отсюда (это фреймворк MVC 3 http://www.asp.net/mvc/mvc3 ), а затем бум, вперед.

KickerKeeper
источник
2

Для меня Microsoft.Web.Infrastructure.dllотсутствовал в папке bin, он не был настроен на локальное копирование в проекте. Скопировал dll из другого проекта в решение, и страница загрузилась.

Алекс Хедли
источник
2

Сначала удалите Microsoft.Web.Infrastructure из package.config.

и снова запустил команду

PM> Install-Package Microsoft.Web.Infrastructure и убедитесь, что свойство Copy Local имеет значение true.

Амрендра
источник
1

Очень простое решение:

В Visual Studio перейдите в Инструменты / Диспетчер пакетов библиотек / Консоль диспетчера пакетов.

<PM> Install-Package Microsoft.Web.InfraStructure

Хорошо провести время

Омид Рахими
источник
1

Вот мой сценарий.

У меня было многопроектное решение, содержащее проекты A, B, C .. N.

Проект B представлял собой библиотеку кода, содержащую фабрику selectlistобъектов.

В процессе разработки проект работал, как ожидалось, но при публикации в нашей тестовой среде я получал ошибку, с которой вы столкнулись:

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.

Произошло то, что произошло через диспетчер пакетов nuget, я случайно установил «Microsoft ASP.NET MVC», который установил зависимости для:

  • Microsoft.AspNet.Razor
  • Microsoft.AspNet.WebPages

Как ни крути, Microsoft.AspNet.WebPages зависит от «Microsoft.Web.Infrastructure».

Мое решение заключалось в удалении трех упомянутых выше пакетов (MVC, Razor, WebPages), затем щелкните правой кнопкой мыши ссылки> добавить ссылку> Сборки> Расширения> System.Web.MVC.

Роб
источник
Я не мог добавить через Assembles, но добавление пакетов Nuget решило проблему
Nitesh
1

Мне пришлось установить «Копировать локально» в свойствах ссылки на False, а затем обратно на True. При этом в файл .csproj добавлен параметр Private True.

<Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">      <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
      <Private>True</Private>
    </Reference>

Я предполагал, что это уже установлено, так как «Копировать локально» отображалось как Истина.

Терпение
источник
0

Я не знаю, что случилось с моим проектом, но он указал неправильный путь к DLL. Nuget установил его правильно, и он действительно был в моей файловой системе вместе с другими пакетами, но просто неправильно указан.

packagesПапка существует два каталога от моего проекта , и это происходит только одну, начав путь с ..\packages\. Я изменил путь, ..\..\packages\и это устранило мою проблему.

Джефф ЛаФэй
источник
0

На моем компьютере зависимость Nuget не была загружена правильно, папка lib внутри пакета nuget не существовала, следовательно, возникла ошибка.

До

введите описание изображения здесь

Я переименовал пакет Nuget в папке пакетов, и Nuget правильно повторно загрузил его с необходимой папкой lib.

После введите описание изображения здесь

Морган Кеньон
источник
0

В некоторых случаях очистка проекта / решения, физическое удаление bin/иobj/ и восстановление будет решить такие ошибки. Это может произойти, например, когда некоторые пакеты и ссылки устанавливаются / добавляются, а затем удаляются, оставляя некоторые артефакты.

Так случилось со мной Microsoft.Web.Infrastructure: изначально проект не требовал этой сборки. После некоторых экспериментов, чистый эффект которых в конце должен был быть нулевым, я получил это исключение. Вышеупомянутые шаги разрешили это без необходимости установки неиспользуемой зависимости.

Олег Широких
источник
0

У меня была такая проблема. У меня была DLL, включенная в проект, и настройка «Копировать локально» по умолчанию была истинной. Не знаю, почему это началось, ведь эта DLL была в проекте долгое время. Я слышал, что ReSharper может его удалить, но не могу сказать, что выполнил удаление неиспользуемых ссылок.

Мне помогло следующее: - Запуск «Update-Package Microsoft.Web.Infrastructure -Reinstall» в проекте, который обновил все решение, но не помог сам по себе. - Затем я просмотрел ссылки на проекты и установил для Copy Local значение false, а затем снова true. Это фактически привело к добавлению строки в файл CSPROJ под ссылкой DLL: True. Или что-то в этом роде ... В любом случае, теперь сборка копировала файлы, как и ожидалось.

Юрий Кастанов
источник
0

Итак, вот что у меня сработало при использовании VS2019. Я получал эту ошибку при попытке обновить пакеты Nuget в одном проекте, в то время как Microsoft.Web.Infrastructure находился в другом проекте в том же решении. Мне пришлось удалить папку Microsoft.Web.Infrastructure.1.0.0.0 из папки Packages моего проекта. Переустановил через nuget и потом все снова заработало. Сумасшедшие вещи.

Шейн Сессна
источник