"Messaggio di errore del parser: impossibile caricare il tipo" in Global.asax


203

Sto lavorando a un progetto MVC3 e ricevo il seguente errore:

Messaggio di errore del parser: impossibile caricare il tipo "GodsCreationTaxidermy.MvcApplication".

Errore sorgente:

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

L'errore che ottengo non è in grado di caricare GodsCreationTaxidermy.Core.MvcApplication ma in questa schermata la parte principale non viene visualizzata nell'errore:

Schermata della pagina di errore

Qualcuno ha qualche idea o una soluzione a questo errore?


8
Hai davvero GodsCreationTaxidermy.Core.MvcApplication class nella tua applicazione? In caso contrario, crea lo stesso e compila il progetto. Funzionerà di sicuro.
Shailesh,

4
Sì, ho GodsCreationTaxidermy.Core.MvcApplication (Global.asax.cs)
PsychoCoder

Il file Global.asax che sembra essere utilizzato (secondo la schermata) sembra diverso da quello che hai mostrato.
Darin Dimitrov,

controlla se la stringa Inherits è uguale al percorso della classe nella tua applicazione (spazio dei nomi + nome percorso), ovvero sono entrambi GodsCreationTaxidermy.Core.MvcApplication
linkerro

Questo è uno dei problemi di Darin, qualunque cosa io faccia, lascia sempre fuori la parte Core
PsychoCoder

Risposte:


175

Il tuo server web locale sta eseguendo un codice diverso da quello a cui stai effettivamente lavorando. Assicurati di aver smesso di eseguire il debug, di arrestare il tuo server Web locale, di ripulirlo e ricostruirlo come suggerito da Peter, ricontrolla global.asax e global.asax.cs e riprova.

Se il problema persiste e si utilizza IIS locale, provare a rimuovere il sito in Gestione IIS e ricrearlo manualmente.


4
Davvero uno strano errore. Ho distribuito a IIS sul server e ho ottenuto questo. Pulito e ricompilato ha funzionato anche per me.
Piotr Kula,

2
Clean / Rebuild + ha ricreato la Directory virtuale e poi ha funzionato.
Fantastik78,

4
Ho avuto il problema quando avevo lo stesso progetto aperto in due istanze di Visual Studio. Pertanto ho avuto due istanze di IIS Express in esecuzione. Ho dovuto chiuderne uno e poi è stato risolto.
lvmeijer,

4
Puoi anche provare a eliminare le cartelle bin / obj nel tuo progetto.
Arni,

1
Ho seguito queste istruzioni e ho lanciato alcune pulizie / ricostruzioni aggiuntive, ho cambiato lo spazio bianco nel file .asax, ho riformattato i miei monitor e ho fatto una maschera sbarazzina accompagnata dalle pipe di Pan e questo sembrava fare il trucco.
MrBoJangles,

207

Verificare che il percorso di output del progetto (proprietà del progetto / Build) sia impostato bine non bin\Release obin\Debug

Per qualche motivo IIS (VS development Server o Local IIS) accede sempre alle librerie dalla bindirectory (e non cercherà le sottodirectory)


27
Credito dove è dovuto. Risolto il mio problema, la mia applicazione era impostata per usare bin \ Debug, cambiandola in bin risolto. Grazie molto.
Joey Bob,

È stato interessante apprendere che i progetti ASP.NET non utilizzano il percorso di output predefinito bin / $ (Configurazione) /. Mille grazie per la risposta!
Jaanus Varus,

2
@JamesPusateri: stai attento però. Ogni volta che si avvia, utilizzerà ciò che è in / bin. Quindi probabilmente il risultato di questa build che hai fatto dopo averlo modificato.
Vincent de Lagabbe,

1
Caspita, al 2018 IIS funziona ancora in questo modo. Cattivo, molto cattivo per Microsoft. Grazie!
Rodrigo T.

1
nulla è cambiato per quasi 7 anni, il consiglio aiuta ancora
Yuriy Vikulov

33

Prova a modificare il tuo file global.asax (aggiungi semplicemente uno spazio da qualche parte) ed esegui nuovamente. questo costringerà il server web incorporato ad aggiornare e ricompilare il file global.asax.

Fai anche una pulizia e ricostruzione - dovrebbe risolvere il problema


4
La modifica di global.asax non ha fatto nulla per me, ma una pulizia e ricostruzione hanno risolto il problema :)
NightShovel

Ho avuto questo problema quando ho finito il potere. Pulito e ricostruito aiutato. Grazie!
Gorgi Rankovski,

Pulizia non riuscita. Build fallito. Non ho avuto problemi con il mio percorso di costruzione. Questo, tuttavia, ha funzionato. Grazie!
egandalf,

Grazie per la risposta Mr. Munnings
dada,

30

Ciò accade a volte se si modificano le informazioni sullo spazio dei nomi (progetto o livello di classe) dopo la global.asaxgenerazione.

Fai clic con il pulsante destro del mouse sul Global.asaxfile e seleziona "Apri con", quindi seleziona "Editor XML (di testo) con codifica" (anche altri editor potrebbero funzionare, ma è quello che uso).

Quindi modifica la sezione "Eredita" nella direttiva XML

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

in modo che corrisponda al nome completo effettivo della classe di applicazione. E questo è tutto.

Un'altra opzione è quella di copiare tutto il codice da Global.asax.cs e quindi eliminare e creare un altro file Global.asax (e quindi copiare nuovamente il codice in Global.asax.cs).


Questo ha funzionato anche per me. Avevo cambiato lo spazio dei nomi per l'assemblaggio per tutti i progetti nella soluzione. Quindi Global.asaxho dovuto modificare il file come indicato in questa risposta e farlo corrispondere a ciò che è nelle impostazioni di configurazione del progetto.
Shiva,

21

Ho chiuso e riaperto Visual Studio e ha funzionato.


4
chiudi TUTTO il tuo studio visivo
Jboy Flaga,

11
Per prima cosa dovremmo provare a uscire dall'auto, a chiudere tutte le portiere, quindi a rientrare.
pigiami

no, devi chiudere le porte di TUTTE le tue auto, allo stesso tempo.
BlackICE

17

Ho dovuto andare su BUILD -> CONFIGURATION MANAGER e - ehm - selezionare la casella accanto al mio progetto per assicurarmi che venisse effettivamente creato.


2
Non capisco il downvote. Questa potrebbe potenzialmente essere stata una soluzione. Questo è in realtà più pertinente di quanto la maggior parte pensi ... Se non selezionata, non è sempre la posizione più ovvia. Soprattutto quando ci sono diverse configurazioni.
Anthony Mason,

Mi piace la tua risposta e il tuo ragionamento!
UKM,

1
Anche questo era il mio problema e non ho idea di come i progetti siano stati deselezionati dalla configurazione.
Seth,

5

Ho avuto questo problema oggi e mi ci è voluto un po 'per trovare la causa.

Fondamentalmente, il mio principale progetto VS2015 includeva un sottoprogetto che era stato creato usando una versione superiore di .Net Framework.

Stranamente, quando si verifica questo problema, VS2015 segnalerà felicemente che la soluzione è stata realizzata correttamente, ma quando si tenta di eseguire il sito Web, viene visualizzato l'errore fuorviante, suggerendo che il Global.asax.csfile è errato.

Quindi, se vedi questo errore e Pulizia / Ricostruzione non aiuta, apri l' Referencesalbero del tuo progetto e controlla i punti esclamativi.

inserisci qui la descrizione dell'immagine

Inoltre, controlla la tua Outputfinestra per messaggi come questo:

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

La soluzione, ovviamente, è fare clic con il tasto destro del mouse sul progetto principale, selezionare la scheda in alto, "Applicazione", e cambiare la versione di Target Framework con una versione successiva che corrisponda al proprio sottoprogetto.

È fastidioso che Visual Studio 2015 ti permetta di creare ed eseguire completamente soluzioni che contengono silenziosamente questo problema. Chiede problemi ...!


2

Puoi anche controllare le proprietà del tuo sito in IIS. (In IIS, fai clic con il pulsante destro del mouse sul sito e scegli Proprietà.) Assicurati che l'impostazione Percorso fisico punta al percorso corretto per la tua applicazione, non per qualche altra applicazione. (Ciò ha risolto questo errore per me.)


2

L'ho appena riscontrato su un'applicazione MVC5 e nulla funzionava per me. Questo è successo subito dopo aver provato a ripristinare un SVN a una versione precedente del progetto.

Ho dovuto cancellare global.asax.cs e quindi aggiungerne uno nuovo facendo clic con il pulsante destro del mouse su Progetto -> Aggiungi nuovo elemento -> Global.asax e finalmente risolto.

Ho pensato che potesse aiutare qualcuno.


Se questo lo risolve per te, probabilmente c'è qualcosa di incasinato nella proprietà "Build action" del global.asax.csfile esistente . Dovrebbe essere impostato su "Compila". L'azione di compilazione del global.asaxfile stesso deve essere impostata su "Contenuto".
Steven Liekens,

Ho fatto esattamente quello che ha fatto @iAteABug_And_iLiked_it e il problema è stato risolto!
zinczinc,

2

Devo segnalare che ho provato almeno 4 suggerimenti da questo post. Nessuno di loro ha funzionato. Tuttavia sono felice di riferire che mi sono ripreso recuperando dal backup. Ho dovuto solo aggiornare le mie ultime modifiche al codice dal file di registro. Ci sono voluti meno di 10 minuti. Ho trascorso 3 volte leggendo questo post e provando altri suggerimenti. Scusate.

È stato un errore molto strano. Buona fortuna a chiunque incontri questo gremlin.


2

Ho lo stesso problema quando ho 2 istanza di Visual Studio che esegue lo stesso progetto. Quindi ho chiuso sia Visual Studio che aperto solo un'istanza e ora funziona perfettamente!


2

Stavo lavorando su un vecchio progetto web ASP.NET basato su cartelle (che detesto) e ho scoperto che questa era la mia soluzione:

Crea una App_Codecartella (se non ne avevi già una)

Sposta il Global.asax.vbfile nella App_Codecartella

Il markup in Global.asax può tralasciare qualsiasi spazio dei nomi (almeno, per questo stile di progetto, afaik):

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

... dove "MyApp" è il nome della classe che viene definita in Global.asax.vb


2

"COSTRUISCI -> CONFIGURATION MANAGER e - ehm - seleziona la casella accanto al mio progetto per assicurarti che venga effettivamente realizzato." Quello e andando nella cartella del progetto in Windows Explorer, premendo le opzioni e deselezionando la casella di controllo "Sola lettura" ha aiutato.


semplicemente ha funzionato per me. Il progetto non ha abilitato l'opzione integrata Non so perché ma questa soluzione alternativa era ciò di cui avevo bisogno, grazie.
willyMon

1

Svuota la cartella bin. Costruisci tutte le librerie di classi dipendenti e le rinvii nel progetto principale e costruisci la soluzione completa.

fonte


1

Anch'io ho affrontato lo stesso problema. Nonostante abbia seguito ogni risposta, non ha funzionato. Quindi ho cambiato "Inherits = namespace.class " in "Inherits = nome dell'assembly completo ", ovvero "Inherits = namespace.class, assemblyname, Version =, Culture =, PublicKeyToken = " Spero che sia d'aiuto.


1

Ciò può accadere anche se si dimentica accidentalmente di impostare la soluzione VS su "Progetti di avvio multiplo" se si esegue un Web e WebApi dalla stessa soluzione.

Puoi verificarlo facendo clic con il pulsante destro del mouse su Soluzione in Esplora soluzioni e selezionare "Proprietà", quindi cercare "Progetti di avvio".


Il mio era simile a questo: stavo eseguendo il progetto API sbagliato nella soluzione. In realtà ho riscontrato un errore del compilatore nell'API che pensavo di essere in esecuzione, ma VS non ha capito quando ho eseguito la soluzione, anche dopo una pulizia.
Giovanni

1

Elimina il .vs directory dalla radice della soluzione. Pulito. Ricostruire.

Questo problema mi fa impazzire di tanto in tanto e inevitabilmente finisco qui per sfogliare le risposte. Ho il sospetto che ci siano più cause che possono produrre questa eccezione, questo una volta funziona per me.


Diverse ore di provare altri mille suggerimenti e questo è quello che l'ha fatto per me. La mia applicazione funzionava bene in Visual Studio, sia nelle configurazioni di debug che di versione, ma una volta pubblicata su IIS stavo ottenendo l'errore. L'eliminazione della cartella .vs e la nuova distribuzione hanno risolto il problema.
Philip Stratford

1

Sì, ho letto tutte le risposte. Tuttavia, se sei me e hai estratto tutto ciò che resta dei tuoi capelli, prova a controllare la cartella \ bin. Come la maggior parte dei file proj potrebbe avere diverse configurazioni raggruppate sotto l'elemento XML PropertyGroup, quindi ho cambiato il OutputPathvalore da 'bin \ Debug' per rimuovere la parte '\ Debug' e Ricostruisci. Ciò ha inserito i file nella cartella \ bin consentendo a Express IIS di trovare e caricare la build. Mi chiedo quale sia il modo corretto di gestire queste diverse build in modo che una distribuzione di debug locale sia in grado di trovare e caricare l'ambiente di destinazione.


Questa è l'unica cosa che ha funzionato. Così tanti corpi sepolti ... è roba del genere che mi fa prendere in seria considerazione altre vocazioni.
Doveryai,

0

Questo problema è stato risolto dando il giusto permesso alla cartella e verificando da IIS.

Mi è stato dato il permesso a tutti mentre sto testando nel mio ambiente locale. Ma in modalità di pubblicazione penso che diamo solo l'autorizzazione all'utente ASP.Net.


0

Ho anche avuto lo stesso errore ... controlla il nome dell'applicazione che hai sviluppato correttamente, ad es. lo spazio dei nomi e il nome dell'assieme assegnato e anche provare a cambiare fisicamente il nome della cartella creata per l'applicazione, tutto questo dovrebbe essere uguale al nome nello spazio dei nomi sopra presente nel file global.asax


0

Ho anche avuto lo stesso errore ... controlla la configurazione IIS della tua directory virtuale e assicurati che Proprietà - ASP.NET - Versione ASP.NET sia la stessa di Proprietà progetto - Applicazione - Framework di destinazione. (Ciò ha risolto questo errore per me.)


0

La mia app è stata costruita in una versione precedente di VS e non aveva una cartella bin. L'avevo aggiornato a una versione più recente e ho avuto un incubo a farlo distribuire. Ho finalmente rintracciato questo errore fino a Progetto> Proprietà> Applicazione. Target Framework è stato impostato su 2.0; cambiarlo sul server in modo che corrisponda a Gestione IIS / Pool di app ha risolto il problema per me.


0

Ho scoperto che cambiare il Namespace sul progetto, senza refactoring che attraverso l'intera soluzione era il mio problema. Controlla le proprietà del tuo progetto e vedi qual è il tuo spazio dei nomi, assicurati che siano allineati, su tutta la linea.


0

Il problema per me è che non ho incluso global.asax.cs nel mio progetto. E poiché stavo copiando i file da .net 4.5 a 4.0 non ho commentato le righe non necessarie in 4.0. Perché non è stato incluso Visual Studio lo ha compilato comunque senza problemi. Ma quando l'ho incluso, ha evidenziato le linee che causano problemi.

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

Ho trascorso letteralmente una giornata cercando di risolvere questo.

L'unica cosa che ha funzionato è stata l'eliminazione del file .sln, la creazione di uno nuovo e l'aggiunta dei progetti uno alla volta.

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


0

Nel mio caso, l'assemblaggio web faceva parte di GAC ... quindi, dopo la compilazione, deve essere installato in GAC e ha funzionato.


0

Ho riscontrato questo messaggio di errore e alla fine ho scoperto che il messaggio di errore era fuorviante. Nel mio caso sembra essersi verificato un problema di routing in IIS che ha causato la lettura di global.asax da un altro sito sul server Web, generando così l'errore.

In IIS, il mio sito era associato a http: * 80: webservices.local e conteneva un'applicazione chiamata MyAPI. Ho ricevuto il messaggio temuto quando ho chiamato l'applicazione MyAPI utilizzando l'indirizzo IP del web server.

Per chiamare correttamente la mia applicazione ho dovuto aggiungere una voce del file host per webservices.local su tutte le macchine che hanno chiamato l'applicazione MyAPI. Quindi tutte le mie richieste dovevano essere precedute da http: //webservices.local/MyAPI/ per poter essere instradate correttamente.


0

Ho provato assolutamente tutto qui e niente ha funzionato. Il mio progetto era in VS 2013. Da allora ho eseguito l'aggiornamento a VS 2015 e ho creato tutte le mie nuove applicazioni nel 2015 ma caricando, compilando, costruendo ecc. Tutte le mie vecchie app che sono state costruite nel 2013 in quella versione.

Ho finito per caricare la soluzione nel 2015 e me l'ha risolto.


0

Ho trascorso più giorni su questo problema. Ho finalmente risolto con la seguente combinazione di suggerimenti da questo post.

  1. Cambia destinazione piattaforma su Qualsiasi CPU. Al momento non avevo questa configurazione, quindi ho dovuto andare al Configuration Manager e aggiungerlo. Stavo compilando specificamente per x64. Questo da solo non ha risolto l'errore.
  2. Modificare il percorso di output in bin\invece di bin\x64\Debug. L'avevo provato diverse volte già prima di cambiare l'obiettivo della piattaforma. Non ha mai fatto differenza se non per ottenere un errore che non è riuscito a caricare l'assembly a causa di un formato non valido.

Per essere chiari, ho dovuto fare entrambi prima di iniziare a lavorare. Li avevo provati singolarmente più volte ma non l'ho mai risolto fino a quando non ho fatto entrambi.

Se cambio una di queste impostazioni sull'originale, ottengo di nuovo lo stesso errore, nonostante abbia eseguito Clean Solution e abbia eliminato manualmente tutto nella bindirectory.


0

Due modi per ottenere questo:

  • Il gestore della configurazione mostra le build dll come un mix di build '64' e 'any cpu'. Metterli tutti nella stessa build lo risolve.

  • Quando si passa da una filiale all'altra, il percorso IIS express a volte non viene aggiornato. Fare clic con il tasto destro del mouse su "IIS Express" nella barra delle applicazioni> Mostra tutte le applicazioni e verificare che il percorso sia rivolto al ramo corretto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.