2012-10-31 24 views
60

Próbowałem przesłać moją stronę internetową na serwer. To działało dobrze z moim lokalnym hostem, więc wrzuciłem wszystko do folderu localhost wwwroot na serwer i zmieniłem ciąg połączenia.Nie można załadować pliku lub zespołu "Microsoft.Web.Infrastructure,

Ale jest to błąd:

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

Projekt był nopcommerce.

Co należy zrobić, aby rozwiązać ten błąd?

+0

Kopiowanie prawdopodobnie nie działało, ponieważ host nie ma zainstalowanych tych samych elementów zależnych, sprawdź ten przewodnik: http://www.iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc- 3-visual-studio –

Odpowiedz

48

Będziesz musiał dołączyć bibliotekę dll do projektu i dodać do niej odniesienie.

Tu jest link do podobnego problemu już na stosie: MVC3 Deployment Dependency Problems

+0

Czy chcesz przesłać floder "_bin_deployableAssemblies" także na serwer? – user1348351

+0

Istnieje kilka różnych sposobów radzenia sobie z tym i zależy to również od sposobu wdrażania. Ale jeśli klikniesz łącze w moim poście, a następnie przejdziesz przez bloga w górnej odpowiedzi z znacznikiem wyboru, zobaczysz, że jeśli ustawisz go poprawnie, biblioteki dll z _bin_deployableAssemblies powinny być automatycznie zadbane, kiedy robisz wdrożyć (lub wdrożyć w sieci). [Oto link do bloga, o którym wspomniałem.] (Http://www.iwantmymvc.com/2011-03-23-bin-deploy-aspnet-mvc-3-visual-studio) –

+4

Blog, do którego prowadzi ten link okaże się, że nie jest już dostępna. Ta odpowiedź - http://stackoverflow.com/a/12683392/137474 pracowała dla mnie. – Baldy

1

Musisz pobrać ramy ASP.NET MVC na serwerze hostingu aplikacji. Jest to szybka naprawa, wystarczy pobrać i zainstalować tutaj (jest to framework MVC 3 http://www.asp.net/mvc/mvc3), a następnie bum jesteś dobry, aby przejść.

22

Instalacja AspNetMVC3ToolsUpdateSetup pobrać z here by rozwiązać ten problem bez dodawania odniesienia

+0

Należy przyjąć odpowiedź! – AlwaysConfused

23

Okazało się, że mimo to działało na moim komputerze dev, zespół nie został dodany do projektu. Wyszukaj Microsoft.Web.Infrastructure w NuGet i zainstaluj go stamtąd. Następnie upewnij się, że wybrano opcję Kopiuj lokalnie.

+1

Ten sam problem, był na CopyLocal = True, nie wiem dlaczego to nie zadziałało. Twoje rozwiązanie rozwiązało mój problem :) –

0

Bardzo proste rozwiązanie:

W Visual Studio, przejdź do Narzędzia/Library Package Manager/Console Package Manager

<PM> Install-Package Microsoft.Web.InfraStructure 

Miłego

21

Okazuje się po wykonaniu czyszczenia Reference , usunięto Microsoft.Web.Infrastructure, ale nie z pliku packages.config. Po próbie dodania go ponownie przy użyciu Package Manager Console, Visual Studio twierdzi, że jest już zainstalowane, co jest fałszywe, ponieważ zostało usunięte.

Następnie usunięto wiersz kodu w pliku

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

packages.config i pobiegł znowu

PM> Install-Package Microsoft.Web.Infrastructure 

polecenia Po tym, teraz to działa dobrze.

5

Resharper wykrył Microsoft.Web.Infrastructure jako nieużywany odnośnik, więc go usunąłem. Lokalnie działało dobrze, ale potem dostałem ten sam błąd po opublikowaniu do dev.

Wnioski, uważaj gdy odnośniki usuwanie oznaczony jako nieużywany przez Resharper

+0

To było dokładnie to, co zrobiłem. – AndreFeijo

0

Tu był mój scenariusz.

miałem wielofunkcyjnego rozwiązania projektu zawierającego projekty A, B, C .. N.

Projekt B był biblioteki kodu, który zawierał fabrykę selectlist obiektów.

Projekt będzie prowadzony zgodnie z oczekiwaniami w rozwoju, ale podczas publikowania w naszym środowisku testowym był otrzymuję błąd zostałeś napotykając:

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. 

Co się stało było przez Nuget menadżera pakietów, miałem przypadkowo zainstalowany " Microsoft ASP.NET MVC”, który zainstalowany zależności dla:

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

Niskie i oto, Microsoft.AspNet.WebPages zależy od "Microsoft.Web.Infrastructure".

Moje rozwiązanie polegało na odinstalowaniu trzech wymienionych wyżej pakietów (MVC, Razor, strony internetowe), a następnie kliknięciu prawym przyciskiem myszy> Dodaj odwołanie> Złożenia> Rozszerzenia> System.Web.MVC.

15

Mimo wielu odpowiedzi dodam jeszcze jeden, który IMHO sprawia, że ​​rzeczy są bardziej wyraźne.

Jako Rob i wrightmail już wspomniano Microsoft.Web.Infrastructure jest pakiet NuGet (link nie jest potrzebny, masz go w NuGet Package Manager).

Wygląda na to, że został odwołany przez Twój projekt i nagle zniknął. Kilka powodów może istnieje, ale ważne jest to, że mimo może masz włączone Automatic Package Restore in Visual Studio przez:

  • zarządzania pakietami Nuget do roztworu (menu kontekstowe w oknie Solution Explorer),
  • Pozwól Nuget pobranie brakujących pakietów (ustawienia),
  • Automatycznie sprawdź dla brakujących pakietów podczas kompilacji w Visual Studio (Settings),

niektóre pakiety mogą wymagać ręcznego reinstall. Nie mam pojęcia, co wprowadza w błąd NuGet, może ręczne usunięcie odniesienia, ale tutaj jest rozwiązanie, które zwykle stosuję w takich przypadkach. Poniższy PM Console pomaga przywracanie pakiet zachowując oryginalną wersję (nie aktualizacją do ewentualnie istniejących nową): może być konieczne

Update-Package Microsoft.Web.Infrastructure -Reinstall

Wersja zachowanie, jeśli nie chcesz, aby przypadkowo nadpisać istniejący pakiet z jego nowsza wersja, która prawdopodobnie usuwa "stare" funkcje, które mogłeś wykorzystać w swoim projekcie.

I jako dowód, mimo bitową długim jednego, że wersja nie zmieni, tu jest wyjście, gdy polecenie jest wykonywane:

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> 

Oczywiście, jeśli chcesz, aby ponownie zainstalować wszystkie pakiety, które może potrzebować zapoznać się z poleceniami aktualizacji/instalacji w NuGet here i here.

2

Miałem podobny problem. NuGet pokazał, że pakiet został pomyślnie zainstalowany, ale odniesienie nie zostało dodane do mojego projektu.

Running <PM> Install-Package Microsoft.Web.InfraStructure również nie pomogło, ponieważ menedżer pakietów powtarzał to już zainstalowany

końcu dodaje się go ręcznie poprzez edycję pliku csproj i dodając te wiersze:

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

To rozwiązało problem .

+0

Sprawdziłem plik csproj i odwoływał się on do folderu, który był przyczyną problemu. Usunięcie tej dodatkowej nazwy folderu rozwiązało mój problem – superachu

1

Dla mnie brakowało Microsoft.Web.Infrastructure.dll w folderze bin, nie było ustawione na kopiowanie lokalne w projekcie. Skopiowano dll z innego projektu do rozwiązania i załadowano stronę.

0

Nie wiem, co stało się z moim projektem, ale zawierało błędną ścieżkę do biblioteki DLL. Nuget zainstalował go poprawnie i rzeczywiście był w moim systemie plików wraz z innymi pakietami, ale tylko odwoływał się niepoprawnie.

Folder packages istnieje dwa katalogi z mojego projektu i wzrósł tylko jeden, rozpoczynając ścieżkę z ..\packages\. Zmieniłem ścieżkę na początek na ..\..\packages\ i naprawiłem mój problem.

Powiązane problemy