Próbowałem załadować moją witrynę internetową na serwer. Działało dobrze z moim lokalnym hostem, więc załadowałem wszystko z mojego wwwroot
folderu lokalnego na serwer i zmieniłem parametry połączenia.
Ale jest ten 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?
c#
asp.net-mvc
user1348351
źródło
źródło
Odpowiedzi:
Będziesz musiał dołączyć bibliotekę dll do swojego projektu i dodać do niej odwołanie.
Oto łącze do podobnego problemu, który jest już dostępny w Stack: MVC3 Deployment Dependency Problems
źródło
Okazuje się, że po przeprowadzeniu czyszczenia odniesienia usunięto go
Microsoft.Web.Infrastructure
, ale nie z pliku packages.config. Po ponownej próbie dodania go za pomocą programuPackage Manager Console
Visual Studio mówi, że jest już zainstalowany, co jest fałszywe, ponieważ został usunięty.Następnie usunąłem wiersz kodu z
packages.config
pliku<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
i ponownie uruchom polecenie
Po tym teraz działa dobrze.
źródło
Zainstalowanie AspNetMVC3ToolsUpdateSetup pobranego z tego miejsca rozwiązałoby ten problem bez dodawania odwołania
źródło
Pomimo wielu odpowiedzi dodam jeszcze jedną, która IMHO czyni sprawę nieco jaśniejszą.
Jak już wspomnieli Rob i wrightmail
Microsoft.Web.Infrastructure
to pakiet NuGet (link nie jest potrzebny, masz go w Menedżerze pakietów NuGet).Najwyraźniej odnosił się do niego twój projekt i nagle zniknął. Może istnieć wiele powodów, ale ważne jest to, że pomimo włączenia funkcji automatycznego przywracania pakietów w programie Visual Studio :
niektóre pakiety mogą wymagać ręcznej ponownej instalacji. Nie wiem, co myli NuGet, może ręczne usuwanie odwołania, ale oto rozwiązanie, które zwykle stosuję w takich przypadkach. Następująca konsola PM pomaga przywrócić pakiet z zachowaniem oryginalnej wersji (bez aktualizacji do prawdopodobnie istniejącej nowej):
Zachowanie wersji może być wymagane, jeśli nie chcesz przypadkowo nadpisać istniejącego pakietu jego nowszą wersją, która prawdopodobnie usunie „starą” funkcjonalność, której mogłeś użyć w swoim projekcie.
I jako dowód, pomimo nieco przydługiego, że wersja się nie zmienia, oto wyjście po wykonaniu polecenia:
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 ponownie zainstalować wszystkie pakiety, może być konieczne zapoznanie się z poleceniami aktualizacji / instalacji w NuGet tutaj i tutaj .
źródło
Zauważyłem, że chociaż działał na moim dev boxie, 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.
źródło
Napotkano ten problem na nowej maszynie z systemem Windows 10 na VS2015 z istniejącym projektem. Menedżer pakietów 3.4.4. Włączono przywracanie pakietów.
Przywracanie nie wydaje się działać całkowicie. Musiałem uruchomić następujące polecenie w wierszu poleceń Menedżera pakietów
Update-Package -ProjectName "YourProjectName" -Id Microsoft.Web.Infrastructure -Reinstall
Spowodowało to następujące zmiany w moim pliku rozwiązania, których NIE wykonało przywracanie.
Samo dodanie powyższych elementów do sekcji ItemGroup w pliku rozwiązania RÓWNIEŻ rozwiąże problem, pod warunkiem, że istnieje plik .. \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll.
Łatwiej jest po prostu wykonać opcję -Reinstall, ale dobrze jest zrozumieć, co robi inaczej niż przywracanie pakietu.
źródło
Resharper wykrył Microsoft.Web.Infrastructure jako nieużywane odniesienie, więc go usunąłem. Lokalnie działało dobrze, ale po opublikowaniu dla programistów pojawił się ten sam błąd.
Podsumowując, uważaj podczas usuwania odniesień oznaczonych jako nieużywane przez Resharper
źródło
Spróbuj zainstalować platformę internetową z https://www.microsoft.com/web/platform/
Mam nadzieję, że to pomoże.
źródło
Miałem podobny problem. NuGet pokazał, że pakiet został pomyślnie zainstalowany, ale odwołanie nie zostało dodane do mojego projektu.
Uruchomienie
<PM> Install-Package Microsoft.Web.InfraStructure
również nie pomogło, ponieważ menedżer pakietów powtarzał, że jest już zainstalowanyW końcu dodałem go ręcznie, edytując plik csproj i dodając te linie:
<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.
źródło
Należy pobrać platformę ASP.NET MVC na serwer obsługujący aplikację. To szybka poprawka, wystarczy pobrać i zainstalować stąd (to jest framework MVC 3 http://www.asp.net/mvc/mvc3 ), a następnie bum, możesz już iść.
źródło
Dla mnie
Microsoft.Web.Infrastructure.dll
brakowało w folderze bin, nie ustawiono kopiowania lokalnego w projekcie. Skopiowano bibliotekę dll z innego projektu w rozwiązaniu i strona wczytuje się.źródło
Najpierw usuń Microsoft.Web.Infrastructure z package.config.
i ponownie uruchom polecenie
PM> Install-Package Microsoft.Web.Infrastructure i upewnij się, że właściwość Copy Local powinna mieć wartość true.
źródło
Bardzo proste rozwiązanie:
W programie Visual Studio przejdź do Tools / Library Package Manager / Package Manager Console
Baw się dobrze
źródło
Oto mój scenariusz.
Miałem rozwiązanie wieloprojektowe zawierające projekty A, B, C .. N.
Projekt B był biblioteką kodu zawierającą fabrykę
selectlist
obiektów.Projekt działałby zgodnie z oczekiwaniami w fazie rozwoju, ale podczas publikowania w naszym środowisku testowym otrzymywałem napotkany błąd:
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.
Zdarzyło się to za pośrednictwem menedżera pakietów NuGet, przypadkowo zainstalowałem „Microsoft ASP.NET MVC”, który zainstalował zależności dla:
I oto, Microsoft.AspNet.WebPages zależy od „Microsoft.Web.Infrastructure”.
Moim rozwiązaniem było odinstalowanie trzech wspomnianych powyżej pakietów (MVC, Razor, WebPages), a następnie kliknięcie prawym przyciskiem myszy odwołań> dodaj odwołanie> Złożenia> Rozszerzenia> System.Web.MVC.
źródło
Musiałem ustawić „Kopiuj lokalnie” we właściwościach odniesienia na Fałsz, a następnie z powrotem na Prawda. Spowoduje to dodanie ustawienia Private True do pliku .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>
Założyłem, że to już zostało ustawione, ponieważ "Kopiuj lokalnie" pokazało się jako Prawda.
źródło
Nie wiem, co się stało z moim projektem, ale odwołuje się on do niewłaściwej ścieżki do biblioteki DLL. Nuget zainstalował go poprawnie i rzeczywiście był w moim systemie plików wraz z innymi pakietami, ale po prostu odwoływał się nieprawidłowo.
packages
Folder istnieje dwa katalogi z mojego projektu i dopiero będzie się jeden po uruchomieniu ścieżkę z..\packages\
. Zmieniłem ścieżkę na początek..\..\packages\
i naprawiłem mój problem.źródło
Na moim komputerze zależność NuGet nie została poprawnie pobrana, folder lib w pakiecie NuGet nie istniał, stąd błąd.
Przed
Zmieniłem nazwę pakietu Nuget w folderze pakietów, a Nuget ponownie załadował go poprawnie z wymaganym folderem lib.
Po
źródło
W niektórych przypadkach czyszczące projektu / roztworu, fizycznie usuwając
bin/
aobj/
i odbudowy rozwiąże takich błędów. Może się to zdarzyć, gdy na przykład niektóre pakiety i odniesienia są instalowane / dodawane, a następnie usuwane, pozostawiając pewne artefakty.Zdarzyło mi się to z
Microsoft.Web.Infrastructure
: początkowo projekt nie wymagał tego montażu. Po kilku eksperymentach, których efekt netto miał wynosić zero na końcu, dostałem ten wyjątek. Powyższe kroki rozwiązały problem bez konieczności instalowania nieużywanej zależności.źródło
Miałem ten problem. Miałem bibliotekę DLL dołączoną do projektu, a ustawienie Kopiuj lokalne było domyślnie prawdziwe. Nie wiem, dlaczego to się zaczęło, ponieważ ta biblioteka DLL była w projekcie przez długi czas. Słyszałem kilka wzmianek o tym, że ReSharper prawdopodobnie go usuwał, ale nie mogę powiedzieć, że przeprowadziłem usuwanie nieużywanych referencji.
Pomogło mi: - Uruchomienie „Update-Package Microsoft.Web.Infrastructure -Reinstall” w projekcie, który zaktualizował całe rozwiązanie, ale nie pomógł sam w sobie. - Następnie przejrzałem odniesienia do projektów i ustawiłem Copy Local na false, a następnie z powrotem na true. W rzeczywistości spowodowało to dodanie wiersza do pliku CSPROJ pod referencją DLL: True. Albo coś w rodzaju ... Tak czy inaczej, teraz kompilacja kopiowała pliki zgodnie z oczekiwaniami.
źródło
Oto, co zadziałało w moim przypadku przy użyciu VS2019. Otrzymałem ten błąd podczas próby zaktualizowania pakietów Nuget w jednym projekcie, podczas gdy Microsoft.Web.Infrastructure znajdował się w innym projekcie w tym samym rozwiązaniu. Musiałem usunąć folder Microsoft.Web.Infrastructure.1.0.0.0 z folderu Pakiety mojego projektu. Ponownie zainstalowałem go przez nuget, a następnie wszystko zaczęło działać ponownie. Zwariowane rzeczy.
źródło