„Nie można wczytać typu [Namespace] .Global”, co mnie zmartwiło

106

W mojej aplikacji .Net 2.0 Asp.net WebForms mam plik Global.asax zawierający następujący kod:

<%@ Application CodeBehind="Global.asax.cs" Inherits="MyNamespace.Global" Language="C#" %>

Jednak podczas budowania pojawia się komunikat o błędzie:

Nie można załadować typu „MyNamespace.Global”.

Wydaje się, że dzieje się tak, ponieważ przestrzeń nazw MyNamespace (zdefiniowana w kodzie pliku Global.asax.cs) nie jest widoczna przez kompilator w pliku Global.asax (nie jest wyświetlana w języku R # intellisence ..). Okazało się, że to bardzo twardy orzech do zgryzienia ... każda pomoc zostanie doceniona!

Uwaga: pliki Global.asax i Global.asax.cs znajdują się w tym samym folderze.

Uwaga 2: Podczas kompilacji z zachęty vs z csc kompiluje się poprawnie

gkdm
źródło
Czy inne strony w aplikacji działają? Czasami tak się dzieje, gdy serwer WWW jest skonfigurowany do uruchamiania 1.1 ale aplikacja jest kompilowany do 2,0
Noon Silk
tak, „
Platforma

Odpowiedzi:

162

Jedna sytuacja, z którą się spotkałem, która spowodowała ten problem, to sytuacja, gdy określasz platformę dla kompilacji za pomocą „Konfiguracji kompilacji”.

Jeśli określisz x86 jako platformę kompilacji, program Visual Studio automatycznie przypisze bin / x86 / Debug jako katalog wyjściowy dla tego projektu. Jest to całkowicie poprawne w przypadku innych typów projektów, z wyjątkiem aplikacji internetowych, w których ASP.NET oczekuje, że zestawy zostaną wyprowadzone do folderu Bin.

W mojej sytuacji znalazłem to, że były one wyprowadzane do obu (Bin i Bin / x86 / Debug), z wyjątkiem tego, że niektóre z bibliotek dll, i niewytłumaczalnie najważniejszy, to biblioteka dll aplikacji internetowej, której brakuje w Bin teczka.

To oczywiście spowodowało problem z kompilacją i stąd wyjątek „Nie można załadować typu globalnego”. Czyszczenie rozwiązania i usuwanie zestawów nie miało wpływu na kolejne kompilacje. Moim rozwiązaniem była po prostu zmiana ścieżki wyjściowej w ustawieniach projektu dla aplikacji internetowej na Bin (zamiast bin / x86 / Debug).

stantona
źródło
13
Ponadto: Spróbuj zamknąć i ponownie otworzyć VS. Jeśli używasz wbudowanego serwera debugowania, może to oznaczać, że działa inna witryna. Otwarcie / zamknięcie spowoduje ponowną rejestrację portów hosta lokalnego.
BradLaney,
1
W moim przypadku chciał umieścić wynik projektu w inetpub \ wwwroot \ myproject \ bin, ale skonfigurowałem iisexpress tak, aby szukał w myProject \ bin. Sama zmiana ścieżki wyjściowej rozwiązała problem.
shindigo
W moim przypadku miałem plik .dll, który powinien zostać dołączony, ale z jakiegoś powodu nie został ustawiony na „kopiuj lokalnie”. Spowodowało to podobny problem z kompilacją, jak ten przedstawiony w tej odpowiedzi.
HockeyJ
Dzięki, Stantona. To właśnie zadziałało dla mnie i w samą porę, abym wrócił do domu.
Bill Norman
3
Zmiana ścieżki wyjściowej projektu na folder bin rozwiązała problem. Dzięki za uratowanie mi dnia!
Tunahan
18

Czy zmieniłeś przestrzeń nazw swojego projektu? Widziałem to czasami, gdy zmieniłem przestrzeń nazw w oknie dialogowym Właściwości projektu, ale program Visual Studio nie zmienił namespacedeklaracji w istniejących plikach kodu.

PhilPursglove
źródło
Jak myślisz, co powinienem zrobić?
gkdm
1
Sprawdź przestrzeń nazw w pliku .cs i upewnij się, że jest taka sama, jak zadeklarowana w pliku asax. Podejrzewam, że będą inni ...
PhilPursglove,
Nie jestem wtedy pewien. Wszystko, co mogę teraz zasugerować, to przebudować i sprawdzić zawartość przestrzeni nazw w twoim zestawie za pomocą ILDASM.
PhilPursglove,
Dziękuję, to było rozwiązanie, które mi pomogło. Użyję Resharper, aby sprawdzić wszystkie przestrzenie nazw w moim rozwiązaniu.
Leonard
Właśnie tak się stało: w projekcie MVC 5 (nie żeby to miało znaczenia) i zmieniłem przestrzeń nazw projektu, ale zapomniałem zmienić Global.asax (i folder App_Start). Niezależnie od doświadczenia, czasami głupie niedopatrzenia wciąż cię dopadają.
Jason Snelders
15

Jestem nowy w rozwoju asp .net i stanąłem przed podobnym problemem.

Zaktualizowałem klasę jako partialklasę i działało dobrze.

public partial class Global : System.Web.HttpApplication
sri
źródło
1
Nie jestem pewien, dlaczego mój plik Global skończył się bez tego, ale to był problem dla mnie, dzięki!
ginja
9

Zrestartowałem Visual Studio i błąd zniknął!

Manoj Attal
źródło
2
to samo działało dla mnie. Upewnij się, że zamknąłeś wszystkie otwarte programy Visual Studio.
alansiqueira
5

Oto kolejny dla książek. Wygląda na to, że dzieje się tak, gdy uruchamiasz więcej niż jedną aplikację internetową z tego samego numeru portu.

Zasadniczo mam kilka gałęzi, które odpracowuję, mam gałąź główną i gałąź przejściową oraz gałąź wydania. Kiedy przełączyłem gałąź na gałąź przejściową, zauważyłem, że używa tej samej konfiguracji adresu portu, więc zdecydowałem się to zmienić. Następnie otrzymałem kolejne ostrzeżenie, że ta rezerwacja powoduje konflikt z inną skonfigurowaną aplikacją. Serwer IIS Express jest wrażliwy na to i z jakiegokolwiek powodu psuje konfigurację.

Po prostu wybierając trzeci port, na który nie ma wpływu, problem ten zniknął, ponieważ następnie mapuje port do nowego mapowania katalogu (moje gałęzie są inaczej zlokalizowane na dysku). Zauważyłem to, ponieważ próbowałem zmienić nazwę typu wskazywaną przezGlobal.asax ale nazwa typu pozostała niezmieniona nawet po ponownym uruchomieniu serwera, więc wyraźnie kod, który zmieniłem, nie został odzwierciedlony we wdrożeniu IIS Express.

Dlatego zanim stracisz zbyt dużo snu, spróbuj zmienić numer portu IIS, który jest obecnie używany do uruchamiania projektu sieci Web.

John Leidegren
źródło
5
  1. Kliknij prawym przyciskiem myszy rozwiązanie projektu i wybierz opcję Batch Build.
  2. Następnie wybierz nazwę swojego projektu i wyczyść i odbuduj.

Działa dobrze dla mnie w VS 2015. Teraz mogę użyć wydarzenia globalnego. Mój Global.asaxplik ma tę linię

<%@ Application Language="C#" CodeBehind="~/App_Code/Global.asax.cs" Inherits="Global" %>

I tworzę plik klasy, Global.asax.csktóry jest w AppCodefolderze, który wygląda jak

public partial class Global : HttpApplication
{
    public Global()
    {
        //
        // TODO: Add constructor logic here
        //
    }
}

Mam nadzieję, że to pomoże

parimal
źródło
3

Sprawdź działanie kompilacji Global.asax.cs. Powinien być ustawiony na Compile.

W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy Global.asax.cs i przejdź do Właściwości. W okienku Właściwości ustaw akcję kompilacji ( bez debugowania).

Wygląda na to, że VS 2008 nie zawsze domyślnie dodaje poprawnie pliki .asax (.cs).

jyoungdev
źródło
3

Wystąpił podobny błąd, gdy miałem plik

<clear/>

jako dziecko (pierwsze dziecko)

<assemblies>

tag w moim pliku Web.config . Umieściłem tagi w moim web.config, aby zapobiec dziedziczeniu konfiguracji w aplikacji wdrożonej w „Domyślnej witrynie sieci Web” w usługach IIS.

jasonjonesutah
źródło
To zdecydowanie wskazało mi właściwy kierunek. Ostatecznie umieściłem <clear /> w katalogu nadrzędnym, ponieważ był to pusty symbol zastępczy. Uważam, że prawdziwym problemem było to, że wyczyścił zestawy, do których odwołuje się moja aplikacja, co uniemożliwiło załadowanie zestawu aplikacji.
Doug Lampe
Ja też tego doświadczyłem - jawne usuwanie wybranych zestawów zamiast czyszczenia listy wyszło ładnie.
Arve Systad
2

W mojej sytuacji było to związane z projektem typu Witryna / Aplikacja internetowa. Niedawno przenieśliśmy się do MVC i musieliśmy zmienić to na aplikację internetową.

Rozwiązanie było więc proste: wybierz swoją witrynę internetową w programie Solution Explorer i usuń ją z rozwiązania, a następnie kliknij prawym przyciskiem myszy rozwiązanie i wybierz opcję Dodaj -> Istniejący projekt ( nie witryna sieci Web ), skompiluj ponownie witrynę internetową.

Siergiej
źródło
2

Stary post, ale pojawia się ten błąd podczas próby konwersji z projektu witryny do projektu aplikacji internetowej.

Postępuj zgodnie z instrukcjami w tym łączu . Nadal mam błąd global.asax, ale wszystko, co zrobiłem, to usunąć go i ponownie dodać, klikając prawym przyciskiem myszy projekt w programie Visual Studio i wybierając opcję Dodaj nowy element. Dodaj plik global.asax i zadziałało.

mjroodt
źródło
2

Niestety żaden z nich nie zadziałał dla mnie. Poprawka, którą znalazłem, była bardziej specyficzna dla programowania, w szczególności debugowania na komputerze lokalnym. Niestety, tak naprawdę nie rozwiązuje to problemu w sposób, na jaki liczyłem, ale jeśli nie masz już rozumu, może to sprawić, że znów będziesz biegał.

TL; DR: we właściwościach projektu na karcie sieci Web w obszarze Serwery wybierz opcję Użyj lokalnego serwera sieci Web IIS. Adres,

http://localhost/MyApp" 

był już wypełniony (mam IIS7, .NET 4.0). Pierwotnie wybrano opcję „Użyj serwera programistycznego programu Visual Studio” ze ścieżką wirtualną „/”

To, co mnie naprawdę zastanawia, to fakt, że nic innego nie działało, przejrzałem wszystkie sugestie, które mogłem znaleźć na SO, i nic nie zadziałało. Dziwne jest to, że błąd (najwyraźniej minęło kilka miesięcy od ostatniego spojrzenia) objawił się, gdy dodałem nowy plik ascx, który był podobny do istniejącego, który został dodany ze starego projektu .net 2.0 (chyba) co pozwoliłoby na niestandardowe zarządzanie użytkownikami z poziomu aplikacji. Świetnie działało przez długi czas, dopóki nie spróbowałem dodać tego nowego pliku. Po dodaniu go i zobaczeniu błędu natychmiast cofnąłem wszystkie zmiany, ale błąd Global.ascx nie zniknął, nawet nie zdmuchując całego projektu i ponownie pobierając najnowsze informacje z kontroli źródła.

BrDaHa
źródło
2

Przekonwertowałem swoje rozwiązanie z VS2003 na VS2010 i miałem problemy z konwersją projektu aplikacji internetowej.

Doświadczyłem dokładnie tego samego problemu i żadna z odpowiedzi nie pomogła.

Dla mnie zadziałało:

  • Kliknij prawym przyciskiem myszy rozwiązanie i wybierz Configuration Manager
  • Przyjrzano się każdej konfiguracji na liście rozwijanej „Konfiguracja aktywnego rozwiązania”.
  • Dołącz aplikację internetową do kompilacji, zaznaczając pole wyboru „Kompiluj”.

wydawałoby się, że problemy, które miałem podczas konwersji, z jakiegoś powodu spowodowały usunięcie projektu aplikacji internetowej z kompilacji.

Mam nadzieję, że ta odpowiedź pomoże każdemu, kto ma ten sam problem ...

mezoid
źródło
1

Jeśli przebudowujesz lub zmieniasz projekt i przenosisz pliki ze starego, upewnij się, że zaznaczyłeś blok Dziedzicz swojego pliku global. W moim przypadku poprzedni projekt / rozwiązanie nazywał się intranet i odtworzyłem go jako Intranet, ale kiedy przeniosłem pliki, nie podobały mu się małe litery (duh). Po prostu przejrzyj nazwy plików.

archanioł76
źródło
1

Zmień identyfikator GUID zespołu. To rozwiązuje wiele WIELE problemów, które znalazłem.

Nathan M.
źródło
Jak zmienić GUID?
Drew Chapin,
1

Miałem podobne problemy, gdy otrzymywałem ten błąd w projekcie.

Could not load type [Namespace].Global
Error in Line 1   etc etc

Po jakimś czasie podejrzewam funkcję z możliwymi błędami w klasie ... później komentując, że ta konkretna funkcja mój problem został rozwiązany.

Nie wiem, dlaczego program Visual Studio nie dał mi tego konkretnego błędu w czasie debugowania. Ale ten błąd może wystąpić z powodu błędów w pliku klasy.

panky sharma
źródło
1

Ta praca dla mnie: Po pierwsze: wydaje się, że bez względu na to, co powiedziałeś do Visual Studio, ide zawsze szuka pliku w: bin (dla aplikacji internetowej i oczywiście w moim przypadku) Więc nawet kiedy powiedziałem do Visual Studio określonej ścieżki do załadowania pliku, IDE nadal szuka złej ścieżki. Więc zmieniam w: Build / Configuration Manager typ danych wyjściowych na: Release (poprzednio czyściłem rozwiązanie, nawet ręcznie), więc po utworzeniu pliku .dll przenoszę go ręcznie do folderu „bin” w projekcie / rozwiązaniu teczka. Mam nadzieję, że to będzie pomocne !!

galimatias
źródło
1

W moim przypadku to z powodu mojego docelowego procesora (x64) zmieniłem go na x86, wyczyściłem projekt, zrestartowałem VS (2012) i odbudowałem projekt; potem zniknął.

bigpony
źródło
1

Kiedy ostatnio napotkałem ten problem, próbowałem wszystkiego, o czym tutaj wspomniano, ale bezskutecznie. Po wyrwaniu sobie włosów postanowiłem spróbować usunąć całą bazę kodu (tak, dość desperacko!), A następnie ponownie pobrać wszystko z mojego repozytorium kodu. Po wykonaniu tego wszystko znów działało dobrze.

Wydaje się to skrajnym rozwiązaniem, ale pomyślałem, że umieszczę je tutaj, ponieważ nie zostało to wcześniej wspomniane w tym wątku.

(Zauważ, że innym razem napotkałem ten problem, kiedy Global.asax dziedziczył po komponencie, który musiał być zarejestrowany na komputerze-hoście. Brakowało tego, dlatego mam ten sam problem).

TL; DR; Jeśli wszystkie odpowiedzi w tym wątku nie działają dla Ciebie, spróbuj usunąć, a następnie ponownie pobrać całą bazę kodu!

Ben Smith
źródło
1

Kilka razy zetknąłem się z tym problemem iw każdym przypadku przebudowywałem komputer lub przełączałem się na nowy komputer. Moim pierwszym krokiem (poza aktualizacją maszyny i instalacją Visual Studio) jest ściągnięcie moich projektów z Gita i przetestowanie ich.

Za każdym razem napotykam ten błąd, ponieważ przed kompilacją próbowałem uzyskać dostęp do kodu lokalnego. Widzisz, mam konfigurację Git i Subversion, aby ignorować moje foldery bin / build, więc po ściągnięciu z mojego repozytorium zapomniałem uruchomić kompilację, która pobiera wymagane pakiety z Nuget (ponieważ mam Git / SVN je również ignoruj) i tworzy Biblioteki DLL potrzebne do rzeczywistego uruchomienia mojej aplikacji.

Wątpię, że rozwiąże to większość problemów ludzi, ale nie widziałem tego na liście potencjalnych rozwiązań, więc pomyślałem, że to dodam.

Kapitan Rochefort
źródło
1

W moim przypadku dodałem Global.asax do projektu WCF, aby z nim eksperymentować, ale zdecydowałem się go usunąć. Usunąłem go z Eksploratora rozwiązań, ale ponieważ nadal znajdował się w folderze, potok nadal go znajdował i powodował ten błąd.

Usunąłem Global.ASAX i GLobal.asax.cs z systemu plików i to rozwiązało problem.

fasolki
źródło
TO rozwiązało to dla mnie, dziękuję, ale chciałbym też w przyszłości dodać dla innych, że w moim przypadku nigdy nie dodałem Global.asax do mojego projektu. Ale jak wspomniano tutaj, pliki global.asax i global.asax.cs były w moim systemie plików. Kiedy je usunąłem, błąd zniknął.
stackonfire
1

Pracując nad grą deweloperską od prawie 20 lat, ten kasztan wciąż nęka mnie w wielu projektach.

W związku z tym dzisiaj, gdy ponownie doświadczam tego samego problemu, w przypadku innego projektu, postanowiłem zbadać dalej i uważam, że jest to związane z lokalizacją folderu Bin ... a dokładniej ze ścieżką wyjściową folderu bin.

Dla mnie w przypadku prostej aplikacji internetowej opartej na usługach skonfigurowanej do uruchamiania / debugowania za pośrednictwem usług IIS zmiana ścieżki wyjściowej z bin \ debug na bin \ rozwiązała problem

Projekt> Właściwości> Kompilacja> Ścieżka wyjściowa

Mam nadzieję, że to pomoże.

timkly
źródło
0

Byłem oszołomiony tym samym problemem. Próbowałem usunąć i iglobal.asax (przed dodaniem zamknięty VS2010). Oczyszczono projekt / rozwiązanie, sprawdziłem, czy nie ma zmian w konfiguracji aplikacji internetowej i innych rzeczy, które działały dla innych osób tutaj w wątkach SO. W końcu wyczyściłem rozwiązanie, usunąłem foldery bin / obj i zatrzymałem wszystkie działające serwery programistyczne VS2010, a następnie cofnąłem wszystkie zmiany i stwierdziłem, że aplikacja działa ponownie. Poprawiłem te same rzeczy i teraz działa dobrze.

Znowu się zdarzyło i tym razem to rozwiązanie zadziałało.

rageit
źródło
0

przejdź do Menedżera konfiguracji we właściwościach rozwiązania. Następnie upewnij się, że wszystkie projekty i powstanie, nie będzie problemem.

Matthew Hart
źródło
0

Musiałem usunąć (zduplikować) pliki z dysku, które nie były uwzględnione w projekcie. Wygląda na to, że duplikaty zostały spowodowane nieudaną zmianą nazwy. Nazwy plików były różne, ale ten sam kod.

Po usunięciu wszystkich plików oof. * Udało mi się przeskanować.

  • foo.aspx
  • foo.aspx.cs
  • foo.aspx.designer.cs
  • oof.aspx
  • oof.aspx.cs
  • oof.aspx.designer.cs
Eric Rohlfs
źródło
0

w moim przypadku był to IISExpress wskazujący na ten sam port co IIS, aby go rozwiązać

C:\Users\Your-User-Name\Documents\IISExpress\config\applicationhost.config

i wyszukaj port, znajdziesz <site>...</site>tag, który musisz usunąć lub skomentować

Mo Hrad A
źródło
0

Miałem ten problem podczas wdrażania tylko na serwerze prod. W moich innych środowiskach to działa ... Po prostu usunąłem rzeczy z folderu bin, a następnie opublikowałem je ponownie i po tym działa.

Raphael
źródło
0

Jeśli używasz programu Visual Studio, prawdopodobnie próbujesz uruchomić aplikację w trybie wydania, spróbuj zmienić ją na tryb debugowania.

pozorny
źródło
0

Próbowałem odbudować rozwiązanie i wyczyścić pliki tymczasowe ASP.NET bez powodzenia.
Ale po uruchomieniu IISRESET błąd zniknął.

Aktualizacja : ponownie miałem ten sam problem 1 miesiąc później. Zauważyłem, że MyWebsite.DLL istnieje w folderze bin, ale nie istnieje w tymczasowych plikach ASP.NET (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files). Wypróbowałem kilka rzeczy, które są sugerowane w tym i „Komunikat błędu parsera: nie można załadować typu” w pytaniach Global.asax (właściwie zapomniałem o własnej odpowiedzi), ale błąd zniknął ponownie dopiero po IISRESET

Michael Freidgeim
źródło
0

Cóż, w moim przypadku VS 2017 przyczyną tego problemu było lekkie obciążenie rozwiązania. Wyłączyłem go i ponownie uruchomiłem VS, a następnie ponownie zbudowałem moje rozwiązanie i problem zniknął.

Siddharth Kumar
źródło
2
Co to jest „lekkie” rozwiązanie?
Fandango68,
0

Chciałem tylko dodać moje dwa centy. Otrzymałem ten sam błąd i bezskutecznie wypróbowałem wszystkie sugestie. Moja sytuacja jest prawdopodobnie inna?

Okazuje się, że automatycznie generowany plik „AssemblyInfo.cs” zawierał dodatkowe spacje, co uniemożliwiało mi uruchomienie aplikacji internetowej (poprzez debugowanie). Oto jak wyglądał plik:

[assembly: AssemblyTitle("WebApplication2")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("

            ")]
[assembly: AssemblyProduct("WebApplication2")]
[assembly: AssemblyCopyright("Copyright © 

             2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Po zabiciu przestrzeni w AssemblyCompany i AssemblyCopyright, w końcu mogłem zbudować i uruchomić projekt.

Obserwowane w następującym środowisku: --Visual Studio 2017 Community w wersji 15.3.0 - Win 7 x64 Enterprise - Nowy projekt> Visual C #> Web> ASP.NET Web Application> Web Forms

raydlevel5
źródło