Błąd Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35

92

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

शेखर
źródło
1
Zainstalowanie Microsoft.Web.Infrastructure.dll z pakietu NuGet zadziałało.
ATUL SHARMA

Odpowiedzi:

197

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:

  1. 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.
    
  2. Zauważysz, że Microsoft.Web.Infrastructure.dll został dodany jako odniesienie (można go zobaczyć w folderze odniesień projektu w Eksploratorze rozwiązań)

  3. Jeśli spojrzysz na właściwości tego odniesienia, zauważysz, że opcjaKopiuj lokalnie ” została domyślnie ustawiona na „ Prawda ”.

  4. Teraz, kiedy „opublikujesz” swój projekt, zostanie wdrożony plik Microsoft.Web.Infrastructure.dll .

rockyb
źródło
2
Dzięki, to rozwiązało mój problem! Używałem kontrolera WebApi w mojej aplikacji Webforms i wdrożenie nie powiodło się z powodu wspomnianego komunikatu o błędzie. Dodając odniesienie do mojego projektu i kopiując plik .dll, udało mi się to uruchomić.
magnattic
1
Początkowo próbowałem przejść przez interfejs „Zarządzaj pakietami NuGet dla tego rozwiązania”, ale po prostu powiedziałem, że Microsoft.Web.Infrastructure.dll jest już zainstalowany, mimo że nigdzie nie widziałem odniesienia do niego. Uruchamiając linię poleceń, mogłem zainstalować od góry, zobaczyć odniesienie, ustawić kopiowanie lokalne, ponownie wdrożyć ... naprawiono. Dzięki!!
hardba11
1
Zainstalowałem za pomocą Menedżera pakietów, ale został już zainstalowany. Ale nie widziałem referencji w projekcie. Dodałem więc samodzielnie i ustawiłem Copy Local na True =)
Akira Yamamoto
27
Zwróć uwagę, że w niektórych przypadkach pojawia się komunikat „Aplikacja internetowa ma już odniesienie do„ Microsoft.Web.Infrastructure 1.0.0.0 ”.”. W takich przypadkach należy użyć polecenia „Update-Package Microsoft.Web.Infrastructure -Reinstall”.
Robba,
1
Już go zainstalowałem, ale „Kopiuj lokalnie” było ustawione na fałsz. Zmiana na true naprawiła to! Dzięki
Lyall
19

Zainstalowałem MVC4 przez WPI i to mi pomogło.

Alex Shyba
źródło
1
Ten działał dla mnie, ponieważ mój problem był na serwerze, ale nie na moim komputerze.
John,
14

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.

Glenn Gordon
źródło
1
Pieniądze. Ponieważ ta odpowiedź jest tak niedawna, a zaakceptowana (która również nie działała dla mnie) jest tak stara, zakładam, że ma to coś wspólnego ze zaktualizowaną wersją programu Visual Studio. Dzięki!
chiliNUT
1
Jak powiedział Robba w komentarzu do innej odpowiedzi, możesz rozwiązać problem nie znajdowania się na liście referencji (ale pakiet jest zainstalowany) za pomocą: "Update-Package Microsoft.Web.Infrastructure -Reinstall". Myślę, że to lepsze niż przeglądanie zestawu.
Jim W mówi, że przywróć Monikę
9

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/

BenW
źródło
6

Znalazłem problem. Zamiast przypadkowo dodać (.cs)plik klasy, dodałem Web API Controllerklasę, 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
4

Po zainstalowaniu Microsoft.Web.Infrastructure przez Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Skopiuj Microsoft.Web.Infrastructure.dllręcznie z Nuget-Packagefolderu aplikacji internetowej, a następnie wklej go do folderu bin aplikacji internetowej wdrożonej na serwerze internetowym.

packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll

U mnie to zadziałało.

Gokulnath
źródło
Odinstaluj pakiet Microsoft.Web.Infrastructure (następnie sprawdź wszelkie zmiany, jeśli używasz Team Foundation Server), a następnie zainstaluj pakiet Microsoft.Web.Infrastructure.
GJKH
3
czasami włamanie jest jedynym sposobem na uruchomienie produktu Microsoft
eagor
To zadziałało również dla mnie. tak, to był hack, ale zaoszczędził dużo czasu. jak to automatycznie usuwane z kosza jest tajemnicą
Heemanshu Bhalla
4

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.Infrastructurego zainstalowało.

Uwaga: CopyLocal została automatycznie ustawiona na true.

contactmatt
źródło
nie zadziałało w moim przypadku. usunąłem folder infrastruktury z pakietów i ponownie zainstalowałem pakiet
Heemanshu Bhalla
0

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

Zly-Zly
źródło
0

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

Ankit
źródło
0

Ponowne opublikowanie witryny rozwiązało problem.

PhillyNJ
źródło
0

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”

wymiana_informacyjna
źródło
0

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

Amant
źródło
0

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

Hong
źródło