Mam małą aplikację internetową. Co działało dobrze, dopóki nie dodałem dwóch genericHandler do mojej aplikacji.
Wprowadziłem następujące zmiany dla obsługi http
<system.web>
<authentication mode="Forms" >
<forms protection="All" timeout="720" defaultUrl="Default.aspx" loginUrl="Login.aspx" >
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<compilation debug="true" targetFramework="4.0" />
<httpHandlers>
<!--Code Log Handler-->
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
<add verb="*" type="InfoDomeNewUI.Handler.SendOWA" path="SendOWA.ashx" />
<add verb="*" type="InfoDomeNewUI.Handler.SendSOS" path="SendSOS.ashx" />
</httpHandlers>
<customErrors mode="Off">
<error statusCode="404" redirect="Templates/PageNotFound.html" />
</customErrors>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<!--Code Log Handler-->
<add name="LogHandler1" path="SendOWA.ashx" verb="*" type="InfoDomeNewUI.Handler.SendOWA"/>
<!-- SMS SENDER-->
<add name="SendSOS" path="SendSOS.ashx" verb="*" type="InfoDomeNewUI.Handler.SendSOS"/>
</handlers>
</system.webServer>
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.
Używam asp.net4.0 i C #. Nie używam MVC
Na hoście lokalnym działa dobrze.
Ale kiedy hostuję opublikowany kod, wyświetla mi się powyższy błąd.
Ślad stosu:-
[FileNotFoundException: nie można załadować pliku lub zestawu „Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” lub jednej z jego zależności. System nie może znaleźć określonego pliku.] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register () +0
[InvalidOperationException: Metoda inicjalizacji uruchomienia przed aplikacją Start na typie System.Web.Http.WebHost.PreApplicationStartCode zgłosiła wyjątek z następującym komunikatem o błędzie: Nie można załadować pliku lub zestawu „Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'lub jedna z jego zależności. System nie może znaleźć określonego pliku ..] System.Web.Compilation.BuildManager.InvokePreStartInitMethods (metody ICollection`1) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465 System.Web.Hosting.Hostitialize ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLeve
[HttpException (0x80004005): Metoda inicjowania uruchamiania przed aplikacją Start na typie System.Web.Http.WebHost.PreApplicationStartCode zgłosiła wyjątek z następującym komunikatem o błędzie: Nie można załadować pliku lub zestawu „Microsoft.Web.Infrastructure, Version = 1.0 .0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'lub jedna z jego zależności. System nie może znaleźć określonego pliku.] System.Web.HttpRuntime.FirstRequestInit (kontekst HttpContext) +11697760 System.Web.HttpRuntime.EnsureFirstRequestInit (kontekst HttpContext) +141 System.Web.HttpRuntime.ProcessRequest (IIContestWeequ7, kontekst) +4866485
Odpowiedzi:
Wygląda na to, że Microsoft.Web.Infrastructure.dll nie jest instalowany w GAC, nawet jeśli .net (4.0, 4.5 lub inny) został pomyślnie zainstalowany w systemie Windows Server. Na hoście lokalnym (zwykle klient Windows) wygląda na to, że znajduje się w GAC, gdy narzędzia / platforma (Visual Studio itp.) Są instalowane.
Jako jedną z możliwych poprawek spróbuj wykonać następujące czynności:
Uruchom następujące polecenie w konsoli Menedżera pakietów. (Jeśli korzystasz z programu Visual Studio, można to osiągnąć za pomocą opcji menu „Narzędzia -> Menedżer pakietów bibliotek -> Konsola menedżera pakietów :)
PM> Install-Package Microsoft.Web.Infrastructure
Po pomyślnym zainstalowaniu zobaczysz następujące komunikaty.
Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'. Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
Zauważysz, że Microsoft.Web.Infrastructure.dll został dodany jako odniesienie (można go zobaczyć w folderze odniesień projektu w Eksploratorze rozwiązań)
Jeśli spojrzysz na właściwości tego odniesienia, zauważysz, że opcja „ Kopiuj lokalnie ” została domyślnie ustawiona na „ Prawda ”.
Teraz, kiedy „opublikujesz” swój projekt, zostanie wdrożony plik Microsoft.Web.Infrastructure.dll .
źródło
Zainstalowałem MVC4 przez WPI i to mi pomogło.
źródło
Miałem ten sam problem. Kiedy wypróbowałem zaakceptowaną odpowiedź (rockyb), otrzymałem wiadomość, że pakiet został już zainstalowany i przypisany do mojego projektu. Kiedy sprawdzałem listę referencji, NIE było do niej odwołań.
Microsoft.Web.Infrastructure został zainstalowany w folderze pakietów mojego rozwiązania. Zamiast używać NuGet do dodania pakietu, po prostu użyłem opcji Dodaj odwołanie. Po lewej stronie wyskakującego okienka wybrałem Przeglądaj, a następnie nacisnąłem przycisk Przeglądaj u dołu okna. Przeszedłem do folderu z pakietami w folderze, w którym znajdowało się moje rozwiązanie, a następnie przejrzałem do ... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 i kliknąłem Microsoft.Web.Infrastructure .dll. Po kliknięciu OK pakiet pojawił się na mojej liście Referencje. Użyłem opcji Web Deploy Package, aby wdrożyć moją witrynę internetową i wszystko działało.
źródło
Dlaczego nie skopiować ręcznie pliku Microsoft.Web.Infrastructure.dll do folderu BIN serwera. To działa dla. Mój projekt to Witryna VS2010.
Ten plik można znaleźć:
C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40
Po prostu skopiuj i wklej go w folderze BIN.
Prawdopodobnie musisz dołączyć to do pliku web.config, jeśli jeszcze go nie masz
<compilation debug="true" targetFramework="4.0"> <assemblies> <add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </assemblies> </compilation>
Źródła: http://thedeveloperblog.com/
źródło
Znalazłem problem. Zamiast przypadkowo dodać
(.cs)
plik klasy, dodałemWeb API Controller
klasę, która dodała plik konfiguracyjny do mojego rozwiązania. Ten plik konfiguracyjny szukał wspomnianej biblioteki DLL (Microsoft.Web.Infrastructure 1.0.0.0). Zadziałało, gdy usunąłem ten plik, wyczyściłem aplikację, a następnie opublikowałem.źródło
Po zainstalowaniu Microsoft.Web.Infrastructure przez
Nuget-Package Manager
PM> Install-Package Microsoft.Web.Infrastructure
Skopiuj
Microsoft.Web.Infrastructure.dll
ręcznie zNuget-Package
folderu aplikacji internetowej, a następnie wklej go do folderu bin aplikacji internetowej wdrożonej na serwerze internetowym.U mnie to zadziałało.
źródło
Update-Package -reinstall Microsoft.Web.Infrastructure
nie zadziałało dla mnie, ponieważ otrzymywałem błędy, że jest już zainstalowany.Musiałem przejść do Microsoft.Web.Infrastructure.1.0.0.0 folderu folderze pakietów i ręcznie usunąć ten folder.
Po wykonaniu tej czynności, uruchomienie
Install-Package Microsoft.Web.Infrastructure
go zainstalowało.Uwaga:
CopyLocal
została automatycznie ustawiona na true.źródło
Miałem ten sam problem i wydawało się, że brakuje pliku „Microsoft.Web.Infrastructure.dll”. Wypróbowałem kilka porad i zainstalowałem MVC itp. I nic nie pomogło. Rozwiązaniem było zainstalowanie „Web Services Enhancements (WSE) 1.0 SP1 dla Microsoft .NET”, w tym Microsoft.Web.Infrastructure.dll. Dostępne pod adresem : http://www.microsoft.com/en-gb/download/details.aspx?id=4065
źródło
Miałem ten sam problem. Próbowałem zainstalować dodatek SP1 dla programu Visual Studio 2010, ale to nie zadziałało.
Wreszcie otrzymuję od kolegi plik Microsoft.Web.Infrastructure.dll. Możesz znaleźć dll na swoim komputerze znajomych, na którym projekt działa doskonale. Spróbuj przeszukać dll w plikach Temp / Temporary ASP.NET. Przejdź do Temp, używając% temp% w oknie uruchamiania.
Po pobraniu dll na komputer, po prostu dodaj odniesienie do swojego projektu i będzie działać.
źródło
Ponowne opublikowanie witryny rozwiązało problem.
źródło
Miałem ten sam problem i niestety nic tutaj nie działało. Wreszcie trafiłem na ten link: https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/
Okazuje się, że rozwiązanie jest trochę głupie: ustaw copy-local dla biblioteki dll microsoft.web.infrastructure na wartość False, a następnie ustaw ją z powrotem na True.
Swoją drogą, myślę, że to, co się dzieje, to fakt, że istnieją dwie wersje biblioteki dll microsoft.web.infrastructure, jedna wstępnie zainstalowana w GAC, a druga, która jest teraz pakietem nuget. Myślę, że jedno maskuje drugie, przez co powoduje problemy. W moim konkretnym przypadku na moim serwerze kompilacji potrzebuję go skopiować do folderu (ten folder jest następnie spakowany i wysłany do wdrożenia). Domyślam się, że system miał kopię lokalnie i pomyślał po prostu „nie, będzie dobrze”
źródło
Mam witrynę tylko z plikami. Dodano MVC 5 do aplikacji webforms (target net45). Musiałem zmodyfikować packages.config
package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45"
do
package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" developmentDependency="true"
aby uruchomił się na lokalnym komputerze w trybie debugowania (poprzednio miał wyżej opisany błąd). Uruchamianie VS 2017 w systemie Windows 7 ... otwierane za pomocą polecenia Plik> Otwórz> Witryna sieci Web> Plik (wybierz katalog główny poza usługami IIS).
źródło
Miałem ten sam problem po uaktualnieniu kilku pakietów NuGet.
Próbowałem wszelkiego rodzaju usuwania, czyszczenia, ponownego instalowania opisanych tutaj i bezskutecznie. Odwołania nie miały infrastruktury Microsoft.Web.Infrastructure, mimo że menedżer NuGet wykazał, że została zainstalowana.
Problem został rozwiązany poprzez wymianę:
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
z
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
w packages.config. Najwyraźniej winowajcą jest „net45”.
źródło