Не вдалося завантажити файл або збірку '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.

Що потрібно зробити, щоб усунути цю помилку?


копіювання, ймовірно, не спрацювало, оскільки на хості не встановлені однакові залежності, перегляньте цей посібник: iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio
Mike Trusov

Відповіді:


57

Вам потрібно буде включити dll до свого проекту та додати посилання на нього.

Ось посилання на подібну проблему, яка вже є у Stack: Проблеми залежності розгортання MVC3


Потрібно завантажувати флодер "_bin_deployableAssemblies" також на сервер ??
user1348351

Існує кілька різних способів вирішити це, і це залежить від того, як ви розгортаєтесь. Але якщо ви натиснете посилання в моєму дописі, а потім пройдетесь по блогу у верхній частині відповіді з позначкою, ви побачите, що якщо ви правильно його налаштували, про dll з _bin_deployableAssemblies слід автоматично дбати, коли ви робите розгортання (або веб-розгортання). Ось посилання на щоденник, про який я згадав.
Колін Пір,

5
Блог, до якого переходить це посилання, здається, більше недоступний. Ця відповідь - stackoverflow.com/a/12683392/137474 спрацювала для мене.
Болді

@ColinPear, велике спасибі, саме те, що я шукав. У мене була веб-програма електронної комерції, яка просила про це !.
PatsonLeaner

у моєму випадку мій сайт працює у plesk без "Microsoft.Web.Infrastructure.dll", але при переході до cpanel ця помилка показала!
Omid-RH

39

Виявляється, після довідкового очищення його видалено Microsoft.Web.Infrastructure, але не з файлу package.config. Після спроби додати його знову за допомогоюPackage Manager Console Visual Studio каже, що він уже встановлений, що є помилковим, оскільки його було видалено.

Потім я видалив рядок коду у packages.configфайлі

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

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

PM> Install-Package Microsoft.Web.Infrastructure

Після цього зараз це працює нормально.



28

Незважаючи на кількість відповідей, я додаю ще одну, яка IMHO робить речі дещо зрозумілішими.

Оскільки Роб і wrightmail вже згадували Microsoft.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 та встановлюйте звідти. Потім переконайтеся, що вибрано Копіювати локально.


1
Та сама проблема, це було на CopyLocal = True, не знаю, чому це не спрацювало. Ваше рішення вирішило мою проблему :)
GôTô

6

Виникла ця проблема на новій машині Windows 10 на VS2015 із наявним проектом. Менеджер пакетів 3.4.4. Відновлення пакетів увімкнено.

Здається, відновлення не працює повністю. Довелося виконати наступне в командному рядку Package Manager

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 у вашому файлі рішення ТАКОЖ вирішить проблему за умови існування .. \ пакети \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll.

Простіше просто зробити перевстановлення, але добре зрозуміти, що це робить інакше для відновлення пакета.


У мене була та сама проблема. Спробував "Відновити nuget-пакети" клацніть правою кнопкою миші опцію меню рішення. Результат сказав мені, що відновити нічого. За вашою порадою я запустив Update-Package -ProjectName "тут назва мого проекту" з консолі диспетчера пакетів, і всі пакети були правильно додані
Роб Боуман

@RobBowman Це чудовий Роб. Це може не мати значення у вашому випадку, але будьте обережні, включивши також прапорець -Перевстановити. Це гарантує, що ви отримаєте ті самі версії пакунків, що і раніше. Якщо ви пропустите цей прапор, він оновить ваш пакет до останньої версії, що може спричинити проблеми, якщо ви не мали наміру це робити. Дивіться це для отримання повної інформації 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 ), тоді бум готовий.


2

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


2

Спочатку видаліть Microsoft.Web.Infrastructure з package.config.

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

PM> Install-Package Microsoft.Web.Infrastructure та переконайтесь, що властивість Copy Local має бути правдою.


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

Мені довелося встановити "Копіювати локально" у "Властивості посилання" на "Помилка", а потім повернути на "Істина". Це додало параметр Private True до файлу .csproj.

<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>

Я припускав, що це вже встановлено, оскільки "Копіювати локально" відображається як True.


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 з папки "Пакети" мого проекту. Повторно встановив його через nuget, а потім все знову почало працювати. Божевільні речі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.