„Komunikat o błędzie analizatora składni: Nie można załadować typu” w pliku Global.asax


203

Pracuję nad projektem MVC3 i pojawia się następujący błąd:

Komunikat o błędzie analizatora składni: Nie można załadować typu „GodsCreationTaxidermy.MvcApplication”.

Błąd źródła:

Linia 1: <%@ Application Codebehind="Global.asax.cs" Inherits="GodsCreationTaxidermy.Core.MvcApplication" Language="C#" %>

Występujący błąd nie może załadować GodsCreationTaxidermy.Core.MvcApplication, ale na tym zrzucie ekranu część rdzenia nie wyświetla się w błędzie:

Zrzut ekranu strony błędu

Czy ktoś ma jakieś pomysły lub rozwiązanie tego błędu?


8
Czy naprawdę masz aplikację GodsCreationTaxidermy.Core.MvcApplication w swojej aplikacji? Jeśli nie, utwórz to samo i skompiluj projekt. Na pewno zadziała.
Shailesh

4
Tak, mam GodsCreationTaxidermy.Core.MvcApplication (Global.asax.cs)
PsychoCoder

Plik Global.asax, który wydaje się być używany (zgodnie ze zrzutem ekranu) wygląda inaczej niż ten, który pokazałeś.
Darin Dimitrov

sprawdź, czy ciąg Inherits jest taki sam jak ścieżka do klasy w Twojej aplikacji (przestrzeń nazw + ścieżka), to znaczy, że oba są GodsCreationTaxidermy.Core.MvcApplication
linkerro

To jeden z problemów Darin, bez względu na to, co robię, zawsze
pomija

Odpowiedzi:


175

Na lokalnym serwerze internetowym działa inny kod niż ten, nad którym aktualnie pracujesz. Upewnij się, że przestałeś debugować, zatrzymaj lokalny serwer internetowy, wyczyść i przebuduj zgodnie z sugestią Petera, dwukrotnie sprawdź global.asax i global.asax.cs i spróbuj ponownie.

Jeśli to nie działa i używasz lokalnych usług IIS, spróbuj usunąć witrynę w Menedżerze usług IIS i ponownie ją utworzyć ręcznie.


4
Naprawdę bardzo dziwny błąd. Wdrożiłem do IIS na serwerze i dostałem to. Oczyszczone i ponownie skompilowane również działały dla mnie.
Piotr Kula

2
Clean / Rebuild + ponownie utworzył katalog wirtualny, a następnie zadziałał.
fantastik78

4
Wystąpił problem, gdy miałem ten sam projekt otwarty w dwóch instancjach Visual Studio. Dlatego miałem uruchomione dwa wystąpienia IIS Express. Musiałem zamknąć jeden, a następnie został rozwiązany.
lvmeijer

4
Możesz także spróbować usunąć foldery bin / obj w swoim projekcie.
arni

1
Postępowałem zgodnie z tymi instrukcjami i wrzuciłem kilka dodatkowych operacji czyszczenia / przebudowy, zmieniłem białe znaki w pliku .asax, ponownie sformatowałem moje monitory i wykonałem wesoły przyrząd wraz z rurami Pan i to chyba załatwiło sprawę.
MrBoJangles

206

Sprawdź, czy ścieżka wyjściowa projektu (właściwości projektu / kompilacja) jest ustawiona na, binczy nie, bin\Release lubbin\Debug

Z jakiegoś powodu IIS (VS development Server lub Local IIS) zawsze uzyskuje dostęp do bibliotek z binkatalogu (i nie szuka podkatalogów)


27
Kredyt tam, gdzie jest należny. Naprawiono mój problem, moja aplikacja była skonfigurowana do używania bin \ Debug, zmieniając go na bin rozwiązał go. Wielkie dzięki.
Joey Bob

Ciekawe było, że projekty ASP.NET nie używają domyślnej ścieżki wyjściowej bin / $ (Konfiguracja) /. Wielkie dzięki za odpowiedź!
Jaanus Varus

2
@JamesPusateri: bądź jednak ostrożny. Przy każdym uruchomieniu użyje tego, co jest w / bin. Więc prawdopodobnie wynik tej jednej kompilacji, którą stworzyłeś po jej zmianie.
Vincent de Lagabbe

1
Wow, w 2018 roku IIS nadal działa w ten sposób. Źle, bardzo źle dla Microsoft. Dzięki!
Rodrigo T.

1
nic się nie zmienia przez prawie 7 lat, porady wciąż pomagają
Jurij Vikulov

33

Spróbuj zmodyfikować plik global.asax (po prostu dodaj gdzieś spację) i uruchom ponownie. to zmusi wbudowany serwer WWW do odświeżenia i ponownej kompilacji pliku global.asax.

Zrób również czyszczenie i przebuduj - powinien rozwiązać problem


4
Modyfikacja global.asax nic dla mnie nie zrobiła, ale wyczyszczenie i przebudowa naprawiły problem :)
NightShovel

Miałem ten problem, kiedy zabrakło mi mocy. Pomogło czyszczenie i odbudowa. Dzięki!
Gorgi Rankovski

Czyszczenie nie powiodło się. Budowa nieudana. Nie miałem problemów ze ścieżką kompilacji. To jednak załatwiło sprawę. Dzięki!
egandalf

Dziękuję za odpowiedź Pan Munnings
dada

30

Zdarza się to czasami, jeśli zmienisz informacje o przestrzeni nazw (poziom projektu lub klasy) po global.asaxwygenerowaniu.

Kliknij prawym przyciskiem myszy Global.asax plik i wybierz „Otwórz za pomocą”, a następnie wybierz „Edytor XML (tekstowy) z kodowaniem” (inne edytory również mogą działać, ale tego używam).

Następnie edytuj sekcję „Dziedziczy” w dyrektywie XML

<% @ Application Codebehind = "Global.asax.cs" Inherits = "GodsCreationTaxidermy.MvcApplication" Language = "C #"%>)

tak, aby pasował do faktycznej pełnej nazwy klasy aplikacji. I to wszystko.

Inną opcją jest skopiowanie całego kodu z Global.asax.cs, a następnie usunięcie i utworzenie kolejnego pliku Global.asax (a następnie skopiowanie kodu z powrotem do Global.asax.cs).


To również działało dla mnie. Zmieniłem przestrzeń nazw dla zestawu dla wszystkich projektów w rozwiązaniu. Musiałem więc edytować Global.asaxplik zgodnie z tą odpowiedzią i dopasować go do ustawień konfiguracji projektu.
Shiva

21

Zamknąłem i ponownie otworzyłem studio wizualne i działało.


4
zamknij WSZYSTKIE Twoje studio wizualne
Jboy Flaga

11
Najpierw wszyscy powinniśmy spróbować wyjść z samochodu, zamknąć wszystkie drzwi, a potem wrócić.
pajics

nie, musisz jednocześnie zamykać drzwi WSZYSTKICH samochodów.
BlackICE

17

Musiałem przejść do BUILD -> CONFIGURATION MANAGER i - ahem - zaznacz pole obok mojego projektu, aby upewnić się, że rzeczywiście zostanie zbudowany.


2
Nie rozumiem opinii. To mogło potencjalnie być rozwiązaniem. Jest to w rzeczywistości bardziej odpowiednie niż większość myśli ... Jeśli niezaznaczone, nie zawsze jest to najbardziej oczywista lokalizacja. Zwłaszcza, gdy istnieje kilka konfiguracji.
Anthony Mason,

Podoba mi się twoja odpowiedź i twoje rozumowanie!
UKM

1
To też był mój problem i nie mam pojęcia, jak projekty zostały usunięte z konfiguracji.
Seth

5

Miałem dzisiaj ten problem i zajęło mi trochę czasu znalezienie przyczyny.

Zasadniczo moim głównym projektem VS2015 był podprojekt, który został zbudowany przy użyciu wyższej wersji .Net Framework.

Dziwnie, gdy masz ten problem, VS2015 z przyjemnością zgłosi, że rozwiązanie zostało poprawnie zbudowane, ale gdy spróbujesz uruchomić stronę internetową, po prostu daje ci to błąd wprowadzający w błąd, co sugeruje, że twój Global.asax.cs plik jest nieprawidłowy.

Jeśli więc zobaczysz ten błąd, a czyszczenie / odbudowa nie pomoże, otwórz projekt References drzewo i sprawdź wykrzykniki.

wprowadź opis zdjęcia tutaj

Sprawdź także Output oknie nie ma takich wiadomości:

The primary reference "C:\Projects\Business Objects 4\bin\Release\BusinessObjects.dll" 
could not be resolved because it was built against 
the ".NETFramework,Version=v4.5" framework. 
This is a higher version than the currently targeted framework
".NETFramework,Version=v4.0".

Rozwiązaniem jest oczywiście kliknięcie prawym przyciskiem myszy głównego projektu, wybranie górnej zakładki „Aplikacja” i zmiana wersji docelowej struktury na wyższą, pasującą do podprojektu.

To denerwujące, że Visual Studio 2015 pozwala w pełni budować i uruchamiać rozwiązania, które cicho zawierają ten problem. Prosi o kłopoty ...!


2

Możesz także sprawdzić właściwości swojej witryny w IIS. (W IIS kliknij prawym przyciskiem myszy witrynę i wybierz Właściwości.) Upewnij się, że ustawienie Ścieżka fizyczna wskazuje poprawną ścieżkę do aplikacji, a nie innej aplikacji. (To naprawiło dla mnie ten błąd.)


2

Właśnie spotkałem to w aplikacji MVC5 i nic nie działało dla mnie. Stało się to zaraz po tym, jak próbowałem przywrócić SVN do starszej wersji projektu.

Musiałem usunąć global.asax.cs, a następnie dodałem nowy, klikając prawym przyciskiem myszy Projekt -> Dodaj nowy element -> Global.asax i TO w końcu to naprawiłem.

Pomyślałem, że może komuś pomóc.


Jeśli to naprawi to za Ciebie, prawdopodobnie we właściwości istniejącej global.asax.cspliku „Build action” jest coś pomieszane . Powinien być ustawiony na „Kompiluj”. Działanie kompilacji global.asaxsamego pliku powinno być ustawione na „Treść”.
Steven Liekens

Zrobiłem dokładnie to, co zrobił @iAteABug_And_iLiked_it i problem został rozwiązany!
zinczinc

2

Muszę zgłosić, że wypróbowałem co najmniej 4 sugestie z tego postu. Żaden z nich nie działał. Jednak z przyjemnością informuję, że odzyskałem, odzyskując dane z kopii zapasowej. Musiałem tylko zaktualizować moje ostatnie zmiany kodu z pliku dziennika. Zajęło to mniej niż 10 minut. Spędziłem 3 razy więcej niż czytając ten post i wypróbowując inne sugestie. Przepraszam.

To był bardzo dziwny błąd. Życzę powodzenia każdemu, kto spotka tego gremlina.


2

Mam ten sam problem, gdy mam 2 instancję programu Visual Studio z tym samym projektem. Więc zamknąłem zarówno Visual Studio, jak i otworzyłem tylko jedną instancję i teraz działa dobrze!


2

Pracowałem nad starszym projektem sieciowym ASP.NET opartym na folderach (którego nienawidzę) - i znalazłem to jako moją poprawkę:

Utwórz App_Codefolder (jeśli jeszcze go nie masz)

Przenieś Global.asax.vbplik do App_Codefolderu

Znaczniki w Global.asax mogą pomijać wszelkie przestrzenie nazw (przynajmniej dla tego stylu projektu, afaik):

<%@ Application Codebehind="Global.asax.vb" Inherits="MyApp" Language="VB" %>

... gdzie „MyApp” to nazwa klasy zdefiniowanej w Global.asax.vb


2

„BUDUJ -> KIEROWNIK KONFIGURACJI i - ahem - zaznacz pole obok mojego projektu, aby upewnić się, że rzeczywiście zostanie zbudowany.” Pomogło to i przejście do folderu projektu w Eksploratorze Windows, naciśnięcie opcji i odznaczenie pola wyboru „Tylko do odczytu”.


po prostu to działało dla mnie. Projekt nie ma wbudowanej opcji włączonej Nie wiem dlaczego, ale to obejście było tym, czego potrzebowałem, dzięki.
willyMon


1

Ja też stanąłem przed tym samym problemem. Mimo podążania za każdą odpowiedzią nie zadziałało. Następnie zmieniłem „Inherits = namespace.class ” na „Inherits = w pełni kwalifikowana nazwa zestawu ”, tj. „Inherits = namespace.class, nazwa zestawu, Version =, Culture =, PublicKeyToken = ” Mam nadzieję, że to pomoże.


1

Może się to również zdarzyć, jeśli przypadkowo zapomnisz ustawić swoje rozwiązanie VS na „Wiele projektów startowych”, jeśli korzystasz z sieci i WebApi z tego samego rozwiązania.

Możesz to sprawdzić, klikając prawym przyciskiem myszy Rozwiązanie w Eksploratorze rozwiązań i wybierając „Właściwości”. Następnie wyszukaj „Projekty startowe”.


Mój był podobny do tego: prowadziłem niewłaściwy projekt API w rozwiązaniu. Naprawdę miałem błąd kompilatora w interfejsie API, który wydawało mi się, że działam, ale VS nie zauważył go po uruchomieniu rozwiązania, nawet po wyczyszczeniu.
Jan

1

Usuń .vskatalog z katalogu głównego rozwiązania. Czysty. Odbudować.

Ten problem raz na jakiś czas doprowadza mnie do szału i nieuchronnie kończę tutaj, szukając odpowiedzi. Podejrzewam, że istnieje wiele przyczyn, które mogą powodować ten wyjątek, który kiedyś dla mnie działa.


Kilka godzin wypróbowania tysiąca innych sugestii i to właśnie dla mnie to zrobiło. Moja aplikacja działała poprawnie w Visual Studio, zarówno w konfiguracjach debugowania, jak i wersji, ale po opublikowaniu w IIS dostałem błąd. Usunięcie folderu .vs i ponowne wdrożenie rozwiązało problem.
Philip Stratford,

1

Tak, czytam wszystkie odpowiedzi. Jeśli jednak jesteś mną i wyciągasz wszystkie resztki włosów, spróbuj sprawdzić folder \ bin. Jak większość plików proj może mieć kilka konfiguracji zgrupowanych w elemencie XML PropertyGroup, więc zmieniłem OutputPathwartość z „bin \ Debug”, aby usunąć część „\ Debug” i przebudować. Spowodowało to umieszczenie plików w folderze \ bin, umożliwiając Express IIS znalezienie i załadowanie kompilacji. Zastanawiam się, jaki jest właściwy sposób zarządzania tymi różnymi kompilacjami, aby lokalne wdrożenie debugowania mogło znaleźć i załadować środowisko docelowe.


To jedyna rzecz, która zadziałała. Tyle zakopanych ciał ... takie rzeczy sprawiają, że poważnie rozważam inne powołania.
doveryai

0

Ten problem został rozwiązany przez udzielenie odpowiedniego pozwolenia na folder, a także sprawdzenie z IIS.

Zezwolono mi wszystkim, gdy testuję w moim lokalnym środowisku. Ale w trybie publikowania myślę, że dajemy tylko uprawnienia użytkownikowi ASP.Net.


0

Otrzymałem również ten sam błąd ... sprawdź nazwę poprawnie opracowanej aplikacji, tj. przydzielona przestrzeń nazw i nazwa zestawu, a także spróbuj fizycznie zmienić nazwę folderu utworzonego dla aplikacji, wszystko to powinno być takie samo jak nazwa w powyższej przestrzeni nazw obecnej w pliku global.asax


0

Wystąpił również ten sam błąd ... sprawdź konfigurację IIS katalogu wirtualnego i upewnij się, że Właściwości - ASP.NET - Wersja ASP.NET jest taka sama jak Właściwości projektu - Aplikacja - Struktura docelowa. (To naprawiło dla mnie ten błąd.)


0

Moja aplikacja została zbudowana w starszej wersji VS i nie miała folderu bin. Uaktualniłem go do nowszej wersji i koszmar zmusił go do wdrożenia. W końcu wyśledziłem ten błąd do Projekt> Właściwości> Aplikacja. Ramy docelowe zostały ustawione na 2.0; zmiana go na serwerze w celu dopasowania w Menedżerze usług IIS / puli aplikacji rozwiązała dla mnie problem.


0

Przekonałem się, że zmiana przestrzeni nazw w projekcie bez zmiany faktury w całym rozwiązaniu była moim problemem. Sprawdź właściwości projektu i zobacz, jaka jest twoja przestrzeń nazw, upewnij się, że linie są wyrównane.


0

Problem polega na tym, że nie uwzględniłem global.asax.cs w moim projekcie. A ponieważ kopiowałem pliki z .net 4.5 do 4.0, nie skomentowałem wierszy, które nie są potrzebne w 4.0. Ponieważ nie zostało uwzględnione, studio wizualne i tak go skompilowało bez problemów. Ale kiedy go załączyłem, podświetliło linie, które powodują problemy.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//using System.Web.Http;
using System.Web.Mvc;
//using System.Web.Optimization;
using System.Web.Routing;

namespace YourNameSpace
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

0

Spędziłem dosłownie dzień, próbując rozwiązać ten problem.

Jedyne, co działało, to usunięcie pliku .sln, utworzenie nowego i ponowne dodanie projektów jeden po drugim.

¯ \ _ (ツ) _ / ¯ - Programowanie - ¯ \ _ (ツ) _ / ¯


0

W moim przypadku zestaw WWW był częścią GAC ... więc po kompilacji trzeba go zainstalować w GAC i działał.


0

Napotkałem ten komunikat o błędzie i ostatecznie odkryłem, że komunikat o błędzie był mylący. W moim przypadku wydaje się, że w usługach IIS wystąpił problem z routingiem, który spowodował odczytanie pliku global.asax z innej witryny na serwerze WWW, co spowodowało błąd.

W IIS moja witryna była powiązana z http: * 80: webservices.local i zawierała aplikację o nazwie MyAPI. Otrzymałem przerażającą wiadomość, gdy dzwonię do aplikacji MyAPI przy użyciu adresu IP serwera WWW.

Aby pomyślnie wywołać moją aplikację, musiałem dodać pozycję pliku hosta dla webservices.local na wszystkich komputerach, które wywołały aplikację MyAPI. Następnie wszystkie moje żądania musiały być poprzedzone http: //webservices.local/MyAPI/ , aby poprawnie trasować .


0

Próbowałem absolutnie wszystkiego tutaj i nic nie działało. Mój projekt był w VS 2013. Od tego czasu zaktualizowałem do VS 2015 i w 2015 roku tworzyłem wszystkie moje nowe aplikacje, ale ładowałem, kompilowałem, budowałem itd. Wszystkie moje stare aplikacje, które zostały zbudowane w 2013 w tej wersji.

Skończyłem właśnie ładowanie rozwiązania w 2015 roku i to rozwiązało dla mnie.


0

W tej sprawie spędziłem wiele dni. W końcu udało mi się to rozwiązać za pomocą następującej kombinacji sugestii z tego postu.

  1. Zmień docelową platformę na Dowolny procesor. Obecnie nie miałem tej konfiguracji, więc musiałem przejść do Menedżera konfiguracji i dodać ją. Kompilowałem specjalnie dla x64. Samo to nie rozwiązało błędu.
  2. Zmień ścieżkę wyjściową na bin\zamiast bin\x64\Debug. Próbowałem tego już kilka razy, zanim zmieniłem cel platformy. Nigdy nie zrobił żadnej różnicy poza otrzymaniem błędu, że nie udało się załadować zestawu z powodu nieprawidłowego formatu.

Żeby było jasne, musiałem zrobić oba z nich, zanim zacznie działać. Wielokrotnie próbowałem ich indywidualnie, ale nigdy tego nie naprawiłem, dopóki nie zrobiłem obu.

Jeśli zmienię jedno z tych ustawień z powrotem na oryginalne, ponownie otrzymuję ten sam błąd, pomimo uruchomienia Clean Solution i ręcznego usunięcia wszystkiego z binkatalogu.


0

Dwa sposoby na uzyskanie tego:

  • Menedżer konfiguracji pokazuje kompilacje dll jako połączenie kompilacji „64” i „dowolnych procesorów”. Umieszczenie ich wszystkich w tej samej kompilacji naprawia to.

  • Podczas przełączania między gałęziami ścieżka ekspresowa IIS czasami nie jest aktualizowana. Kliknij prawym przyciskiem myszy „IIS Express” na pasku zadań> Pokaż wszystkie aplikacje i sprawdź, czy ścieżka prowadzi do właściwej gałęzi.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.