Stworzyłem projekt internetowy i dobrze działa w Visual Studio. Jednak otrzymałem następujący błąd po opublikowaniu go na azurewebsites. Co może powodować problem?
Nie można załadować pliku lub zestawu „System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” lub jednej z jego zależności. Definicja manifestu zlokalizowanego zestawu nie jest zgodna z odwołaniem do zestawu. (Wyjątek od HRESULT: 0x80131040)
Opis: wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania internetowego. Zapoznaj się ze śledzeniem stosu, aby uzyskać więcej informacji o błędzie i miejscu jego powstania w kodzie.
Szczegóły wyjątku: System.IO.FileLoadException: nie można załadować pliku lub zestawu „System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” lub jednej z jego zależności. Definicja manifestu zlokalizowanego zestawu nie jest zgodna z odwołaniem do zestawu. (Wyjątek od HRESULT: 0x80131040)
Błąd źródła:
Podczas wykonywania bieżącego żądania internetowego został wygenerowany nieobsługiwany wyjątek. Informacje dotyczące pochodzenia i lokalizacji wyjątku można zidentyfikować za pomocą poniższego śladu stosu wyjątków.
Śledzenie ładowania zestawu: Poniższe informacje mogą być pomocne w ustaleniu, dlaczego nie można załadować zestawu „System.Web.Http.WebHost, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35”.
WRN: Rejestrowanie powiązań zestawu jest wyłączone. Aby włączyć rejestrowanie błędów powiązań zestawów, ustaw wartość rejestru [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) na 1. Uwaga: Istnieje pewien spadek wydajności związany z rejestrowaniem niepowodzenia powiązania zespołu. Aby wyłączyć tę funkcję, usuń wartość rejestru [HKLM \ Software \ Microsoft \ Fusion! EnableLog].
Poniżej znajduje się część pliku web.config.
<system.web>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers></system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Copy Local
już prawda. O dziwo pokazuje, żeRuntime Version
jest v4.0.30319 zamiast v5?Jeśli nadal szukasz odpowiedzi, spróbuj sprawdzić ten wątek pytań . Pomogło mi to rozwiązać podobny problem.
edycja: Rozwiązaniem, które mi pomogło, było uruchomienie
Update-Package Microsoft.AspNet.WebApi -reinstall
z menedżera pakietów NugGet, zgodnie z sugestią Pathoschild. Następnie musiałem usunąć mój plik .suo i zrestartować VS, zgodnie z sugestią Sergeya Osypchuka w tym wątku .źródło
Spotkałem ten sam problem i rozwiązałem go, ustawiając wartość
CopyLocal
true dla następujących bibliotek:Muszę dodać, że korzystam z MVC4 i NET 4
źródło
U mnie pracował nad dodaniem następującej sekcji do
web.config
pliku:Ten przykład oznacza MVC 5.1. Mam nadzieję, że pomoże to komuś rozwiązać taki problem.
źródło
Microsoft.AspNet.WebApi.WebHost
pakiet za pośrednictwem nuget.U mnie zaczęło działać po wybraniu „Usuń dodatkowe pliki w miejscu docelowym” w opcjach publikowania plików w ustawieniach w oknie dialogowym publikowania.
źródło
W opublikowanym (wdrożonym środowisku) brakuje biblioteki dll. To jest powód, dla którego działa w lokalnym, tj. Visual Studio, ale nie w środowisku witryny Azure.
Po prostu wykonaj Copy Local = true we właściwościach zestawu (System.Web.Http.WebHost), a następnie wykonaj ponowne wdrożenie, powinno działać dobrze.
źródło
Używam vs2012 i myślę, że aktualizacja KB2781514 zmieniła niektóre ustawienia. Cały mój System.Web.Http w moim projekcie MVC4 zmienił się na false i nadal otrzymałem tę wiadomość. Zmieniłem właściwość
All file in this project
in Publishing, ale nie działa. Wreszcie muszę zmieniaćCopy Local = true
jeden po drugim i rozwiązać ten problem.źródło
Otrzymałem ten sam błąd i zmieniłem wersję z 4 na 3 i jest rozwiązany:
źródło
Miałem ten sam problem w mojej aplikacji.
Wystarczy skopiować
system.web.http.webhost
plik z głównego projektu, który uruchamiasz w programie Visual Studio, i wkleić go dobin
katalogu opublikowanego projektu .Po tym może pokazać ten sam błąd, ale nazwa katalogu została zmieniona
system.web.http
. Wykonaj tę samą procedurę, co powyżej. Będzie działać po przesłaniu wszystkich plików. Jest to spowodowane pakietem NuGet w programie Visual Studio, które pobierają z Internetu, ale na serwerze nie mogą go pobrać.Możesz znaleźć ten plik w
bin
katalogu swojego projektu .źródło
Zdarzyło mi się to w VS2013 (aktualizacja 5) /ASP.NET 4.5, w typie projektu „Aplikacja internetowa”, która obejmuje MVC i Web API 2. Błąd wystąpił zaraz po utworzeniu projektu i przed dodaniem dowolnego kodu. Dodanie poniższej konfiguracji naprawi to za mnie. Po rozwiązaniu problemu „System.Web.Helpers” pojawiły się dwa podobne błędy dotyczące „System.Web.Mvc” i „System.Web.WebPages”.
źródło
Brakowało mi kilku bibliotek DLL. Nawet gdybym ręcznie skopiował je do katalogu przy następnej publikacji, zniknęłyby. Każdy z nich był już ustawiony na Kopiuj lokalnie w VS. Rozwiązaniem dla mnie było ustawienie każdego z nich na Kopiuj lokalnie fałszywe, zapisz, zbuduj, a następnie ustaw każdy tak, aby kopiował lokalnie. Tym razem, kiedy opublikowałem wszystkie biblioteki DLL, które zostały poprawnie opublikowane. Dziwne
źródło
Jeśli masz wiele projektów w swoim rozwiązaniu i jeden z projektów nie może zostać skompilowany z powodu tego błędu, upewnij się, że zainstalowano pakiet WebApi Core nuget w tym projekcie. Po prostu dodanie odwołania do System.Web.Http nie pomaga, musisz zainstalować poprawny pakiet NuGet w tym projekcie.
Miałem wiele projektów w swoim rozwiązaniu, a WebApi Core był już zainstalowany w innym projekcie. Odwołałem się do zestawu System.Web.Http, klikając prawym przyciskiem myszy i zaznaczając zestaw z listy i nie działał on na platformie Azure, chociaż lokalnie skompilowałby się dobrze. Musiałem usunąć odwołanie ręczne i dodać pakiet WebApi Core nuget do każdego projektu, który wymagał odwołania do zestawu.
źródło
W przypadku, gdy opcja „Kopiuj lokalnie” ma już wartość Prawda, czasami wydaje mi się, że działa, jeśli usuniesz pliki, w których została opublikowana, i ponownie ją opublikujesz.
Na przykład, jeśli korzystasz z usług IIS, usuń witryny internetowe i zawartość katalogu, w którym są publikowane, i ponownie opublikuj.
W miejscu docelowym mogą znajdować się starsze wersje plików, więc aby upewnić się, że nie używasz starszych wersji, usuń wszystko przed ponownym opublikowaniem.
źródło
Usunąłem następujący wpis z web.config i zadziałał.
źródło
Upewnij się, że wersja pakietu jest taka sama w całym rozwiązaniu. Właśnie obniżyłem i zaktualizowałem
Microsoft.AspNet.Mvc
pakiet w ramach rozwiązania, a problem został rozwiązany.źródło