"Impossibile caricare il tipo [Namespace] .Global" causandomi dolore


106

Nella mia app .Net 2.0 Asp.net WebForms, ho il mio Global.asax contenente il seguente codice:

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

Tuttavia, quando compilo ricevo un errore che dice-

Impossibile caricare il tipo "MyNamespace.Global".

Ciò sembra essere dovuto al fatto che lo spazio dei nomi MyNamespace (definito nel codice dietro il file Global.asax.cs) non viene visto dal compilatore nel file Global.asax (non viene visualizzato in R # intellisence ..). Questo si è rivelato un dado molto difficile da rompere ... qualsiasi aiuto sarà apprezzato!

Nota: Global.asax e Global.asax.cs si trovano nella stessa cartella.

Nota 2: quando si compila dal prompt vs con csc, viene compilato correttamente


Altre pagine dell'app funzionano? A volte questo accade quando il server web è configurato per eseguire 1.1 ma l'app è compilata per 2.0
Noon Silk

sì, "Target Framework" è 2.0
gkdm

Risposte:


162

Una situazione che ho riscontrato che ha causato questo problema è quando specifichi la piattaforma per una build tramite "Build Configuration".

Se specifichi x86 come piattaforma di compilazione, visual studio assegnerà automaticamente bin / x86 / Debug come directory di output per questo progetto. Ciò è perfettamente valido per altri tipi di progetto, ad eccezione delle applicazioni Web in cui ASP.NET prevede che gli assembly vengano emessi nella cartella Bin.

Quello che ho trovato nella mia situazione era che venivano emessi su entrambi (Bin e Bin / x86 / Debug), con l'eccezione che alcune delle dll, e inspiegabilmente la più importante è la dll dell'applicazione web, che mancano dal Bin cartella.

Questo ovviamente ha causato un problema di compilazione e quindi l'eccezione "Impossibile caricare il tipo Global". La pulizia della soluzione e l'eliminazione degli assemblaggi non hanno fatto differenza per le build successive. La mia soluzione era semplicemente modificare il percorso di output nelle impostazioni del progetto per l'app Web in Bin (anziché bin / x86 / Debug).


13
Inoltre: prova a chiudere e riaprire VS. Se si utilizza un server di debug integrato, potrebbe essere in esecuzione un sito Web diverso. L'apertura / chiusura registrerà nuovamente le porte localhost.
BradLaney

1
Nel mio caso voleva mettere l'output del progetto in inetpub \ wwwroot \ myproject \ bin, ma avevo iisexpress configurato per cercare in myProject \ bin. La semplice modifica del percorso di output ha risolto il problema.
shindigo

Nel mio caso avevo un file .dll che avrebbe dovuto essere incluso, ma per qualche motivo non era impostato su "copia locale". Ciò ha causato un problema di compilazione simile a quello dichiarato in questa risposta.
HockeyJ

Grazie, Stantona. Questo è ciò che ha funzionato per me, e giusto in tempo per tornare a casa.
Bill Norman

3
La modifica del percorso di output del progetto nella cartella bin ha risolto il problema. Grazie per avermi salvato la giornata!
Tunahan

18

Hai cambiato lo spazio dei nomi del tuo progetto? L'ho visto accadere occasionalmente quando ho cambiato lo spazio dei nomi nella finestra di dialogo Proprietà progetto ma Visual Studio non ha modificato la namespacedichiarazione nei file di codice esistenti.


Cosa pensi che dovrei fare?
gkdm

1
Controlla lo spazio dei nomi nel tuo file .cs e assicurati che sia lo stesso di quello dichiarato nel file asax. Il mio sospetto è che saranno diversi ...
PhilPursglove

Allora non ne sono sicuro. Tutto ciò che posso suggerire per ora è ricostruire e controllare il contenuto degli spazi dei nomi nel tuo assembly con ILDASM.
PhilPursglove

Grazie, questa è stata la soluzione che mi ha aiutato. Userò Resharper per verificare tutti gli spazi dei nomi nella mia soluzione.
Leonard

Ho appena fatto questo: in un progetto MVC 5 (non che sia importante) e ho cambiato lo spazio dei nomi del progetto ma ho dimenticato di cambiare Global.asax (e la cartella App_Start). Indipendentemente dall'esperienza, a volte le stupide sviste ti prendono ancora.
Jason Snelders

15

Sono nuovo nello sviluppo di asp .net e ho affrontato il problema simile.

Ho aggiornato la classe come partialclasse e ha funzionato bene.

public partial class Global : System.Web.HttpApplication

1
Non sono sicuro del motivo per cui il mio file globale è finito senza questo, ma questo era il problema per me, grazie!
ginja

9

Ho riavviato Visual Studio e l'errore era sparito!


2
lo stesso ha funzionato per me. Assicurati di chiudere TUTTO Visual Studio aperto.
alansiqueira27

5

Eccone un altro per i libri. Sembra che ciò accada quando si avvia più di un'applicazione Web dallo stesso numero di porta.

Fondamentalmente, ho un paio di rami su cui lavoro, ho un ramo principale e un ramo di staging e un ramo di rilascio. Quando sono passato al ramo di staging ho notato che utilizzava la stessa configurazione dell'indirizzo di porta, quindi ho deciso di cambiarlo. Ho quindi ricevuto un altro avviso che questa prenotazione è in conflitto con un'altra applicazione configurata. Il server IIS Express è sensibile a questo e per qualsiasi motivo ne blocchi la configurazione.

Selezionando semplicemente una terza porta inalterata, questo problema è scomparso perché mappa la porta su una nuova mappatura di directory (i miei rami si trovano in modo diverso sul disco). L'ho notato perché ho provato a cambiare il nome del tipo a cui puntava, Global.asaxma il nome del tipo è rimasto invariato anche dopo il riavvio del server, quindi chiaramente, il codice che stavo cambiando non si rifletteva nella distribuzione di IIS Express.

Quindi, prima di perdere troppo sonno su questo, prova a cambiare il numero di porta IIS attualmente utilizzato per eseguire il progetto web.


5
  1. Fare clic con il tasto destro su Project Solution e selezionare Batch Build.
  2. Quindi selezionare il nome del progetto e pulire e ricostruire.

Funziona bene per me IN VS 2015.Ora posso utilizzare l'evento globale. Il mio Global.asaxfile ha questa linea

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

E creo un file di classe Global.asax.csche si trova nella AppCodecartella che assomiglia

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

Spero che questo ti possa aiutare


3

Controlla l'azione di compilazione di Global.asax.cs. Dovrebbe essere impostato su Compile.

In Esplora soluzioni, fare clic con il pulsante destro del mouse su Global.asax.cs e passare a Proprietà. Nel riquadro Proprietà, imposta l'Azione di compilazione ( senza eseguire il debug).

Sembra che VS 2008 non aggiunga sempre i file .asax (.cs) correttamente per impostazione predefinita.


3

Ho riscontrato un errore simile quando avevo un file

<clear/>

tag come figlio (il primo figlio) di

<assemblies>

tag nel mio Web.config . Avevo inserito i tag nel mio web.config nel tentativo di impedire l'ereditarietà della configurazione in un'applicazione distribuita sotto il "Sito Web predefinito" in IIS.


Questo mi ha decisamente indirizzato nella giusta direzione. Alla fine avevo messo <clear /> nella directory principale poiché era un segnaposto vuoto. Credo che il vero problema fosse che ha cancellato gli assembly a cui faceva riferimento la mia applicazione che impediva il caricamento dell'assembly dell'applicazione.
Doug Lampe,

Ho sperimentato anche questo: rimuovere gli assembly selezionati in modo esplicito invece di cancellare l'elenco funzionato bene.
Arve Systad

2

Nella mia situazione era correlato al tipo di sito Web / applicazione Web del progetto. Recentemente siamo passati a MVC e abbiamo dovuto cambiarlo in Web Application.

Quindi, la soluzione era semplice: seleziona il tuo sito web in Esplora soluzioni e rimuovilo dalla soluzione, quindi fai clic con il pulsante destro del mouse sulla soluzione e seleziona Aggiungi -> Progetto esistente ( non sito Web ), ricompila il sito web.


2

Vecchio post ma ricevo questo errore quando provo a convertire dal progetto del sito Web al progetto dell'applicazione Web.

Segui le istruzioni su questo link . Ho ancora ricevuto l'errore global.asax ma tutto ciò che ho fatto è stato eliminarlo e aggiungerlo di nuovo facendo clic con il pulsante destro del mouse sul progetto in Visual Studio e selezionando aggiungi nuovo elemento. Aggiungi il file global.asax e ha funzionato.


2

Nessuno di questi ha funzionato per me, sfortunatamente. La correzione che ho trovato era più specifica per lo sviluppo, in particolare, il debug sul tuo computer locale. Inoltre, sfortunatamente, non risolve davvero il problema nel modo in cui speravo, ma se sei alla fine, questo potrebbe farti correre di nuovo.

TL; DR: nelle proprietà del progetto, nella scheda Web, in Server, selezionare Usa server Web IIS locale. L'indirizzo,

http://localhost/MyApp" 

era già popolato (ho IIS7, .NET 4.0). Quello che era stato originariamente selezionato era "Usa Visual Studio Development Server" con un percorso virtuale di "/"

Ciò che mi lascia davvero perplesso è il fatto che nient'altro ha funzionato, ho esaminato tutti i suggerimenti che ho trovato su SO e niente avrebbe funzionato. La cosa strana è che l'errore (apparentemente, sono passati alcuni mesi dall'ultima volta che ho guardato) si è manifestato quando ho aggiunto un nuovo file ascx simile a uno esistente che è stato aggiunto da un vecchio progetto .net 2.0 (credo) ciò consentirebbe la gestione utente personalizzata dall'interno dell'applicazione. Ha funzionato, magnificamente, per molto tempo, finché non ho provato ad aggiungere questo nuovo file. Dopo averlo aggiunto e aver visto l'errore, ho prontamente annullato tutte le modifiche, ma l'errore Global.ascx non andava via, nemmeno spazzando via l'intero progetto e recuperando le ultime dal controllo del codice sorgente.


2

Avevo convertito la mia soluzione da VS2003 a VS2010 e avevo avuto problemi con la conversione del progetto dell'applicazione web.

Ho riscontrato lo stesso identico problema e nessuna delle risposte ha funzionato per me.

Quello che ha funzionato per me è stato:

  • Fare clic con il tasto destro sulla soluzione e selezionare Configuration Manager
  • Ha esaminato ciascuna delle configurazioni nell'elenco a discesa "Configurazione soluzione attiva".
  • Ha incluso l'applicazione web nella build selezionando la casella di controllo "Build".

sembrerebbe che i problemi che ho avuto durante la conversione avessero rimosso il progetto dell'applicazione web dalla build per qualche motivo.

Si spera che questa risposta aiuti chiunque abbia lo stesso problema ...


1

Se ricostruisci o modifichi un progetto e sposti i file da uno vecchio, assicurati di controllare il blocco Inherit del tuo file global. Nel mio caso, il precedente progetto / soluzione si chiamava intranet e l'avevo ricreato come Intranet, ma quando ho spostato i file, non gli piaceva il minuscolo (duh). Basta fare una ricerca generale dei nomi dei file.


1

Modificare il GUID dell'assembly. Questo risolve molti MOLTI problemi, ho trovato.


Come si modifica il GUID?
Drew Chapin

1

Ho avuto problemi simili quando ricevevo questo errore su un progetto.

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

Dopo aver trascorso un po 'di tempo sospetto che una funzione con possibili errori in una classe ... in seguito commentando quella funzione specifica, il mio problema viene risolto.

Non so perché Visual Studio non mi abbia fornito quell'errore specifico al momento del debug. Ma questo errore potrebbe verificarsi a causa di alcuni errori nel file di classe.


1

Questo lavoro per me: prima cosa: sembra che non importa cosa hai detto a visual studio, l'ide cerca sempre il file in: bin (per app web e fuori rotta nel mio caso) Quindi, anche quando ho detto a visual studio un percorso specifico per caricare il file, l'ide continua a cercare il percorso sbagliato. Quindi cambio in: Build / Configuration Manager il tipo di output in: Release (in precedenza ho pulito la soluzione, anche manualmente) quindi, quando è stato creato il file .dll, sono passato manualmente alla cartella "bin" sotto il progetto / soluzione cartella. Spero che questo sia utile !!


1

Nel mio caso, è stato a causa del mio processore di destinazione (x64) che l'ho cambiato in x86, pulito il progetto, riavviato VS (2012) e ricostruito il progetto; poi era sparito.


1

Quando ho riscontrato questo problema più di recente, ho provato tutto ciò che è menzionato qui ma senza alcun risultato. Dopo essermi strappato i capelli, ho deciso di provare a cancellare tutta la mia base di codice (sì, piuttosto disperato!) E poi ho riscaricato tutto dal mio repository di codice. Dopo aver fatto questo, tutto ha funzionato di nuovo bene.

Sembra una soluzione estrema ma ho pensato di includerla qui perché non è stata menzionata prima in questo thread.

(Notare che l'altra volta che ho riscontrato questo problema, è stato quando Global.asax ereditava da un componente che doveva essere registrato sulla macchina host. Questo mancava, quindi ho avuto lo stesso problema).

TL; DR; Se tutte le risposte in questo thread non funzionano, prova a eliminare e quindi a scaricare nuovamente l'intero codice di base!


1

Ho riscontrato questo problema alcune volte e in ogni caso stavo ricostruendo un computer o passando a un nuovo computer. Il mio primo passo (oltre ad aggiornare la macchina e installare Visual Studio) è tirare giù i miei progetti da Git e testarli.

Ho riscontrato questo errore ogni volta perché ho provato ad accedere al mio codice locale prima di compilarlo. Vedi, ho configurato Git e Subversion per ignorare le mie cartelle bin / build, quindi dopo un pull dal mio repository mi sono dimenticato di eseguire una build che estrae i pacchetti richiesti da Nuget (dato che Git / SVN ignora anche quelli) e crea il Le DLL necessarie per eseguire effettivamente la mia app.

Dubito che questo risolverà i problemi della maggior parte delle persone, ma non l'ho visto nell'elenco delle potenziali soluzioni, quindi ho pensato di aggiungerlo.


1

Nel mio caso, avevo aggiunto Global.asax a un progetto WCF per sperimentarlo, ma ho deciso di rimuoverlo. L'ho rimosso da Esplora soluzioni, ma poiché era ancora nella cartella, la pipeline lo stava ancora trovando e causando questo errore.

Ho rimosso Global.ASAX e GLobal.asax.cs dal filesystem e questo ha risolto l'errore.


QUESTO ha risolto per me, grazie, ma vorrei anche aggiungere per altri in futuro che nel mio caso non ho mai aggiunto Global.asax al mio progetto. Ma come accennato qui, i file global.asax e global.asax.cs erano nel mio file system. Quando li ho eliminati, il bug è scomparso.
Stackonfire

1

Essendo stato nel gioco di sviluppo per quasi 20 anni, questa castagna ha continuato a tormentarmi in più progetti.

Pertanto, oggi, pur riscontrando di nuovo lo stesso problema, contro un altro progetto, ho deciso di indagare ulteriormente e credo che ciò sia correlato alla posizione della cartella Bin ... o più specificamente, al percorso di output della cartella bin.

Per me, per una semplice applicazione web basata su servizi configurata per eseguire / eseguire il debug tramite IIS, stava cambiando il percorso di output da bin \ debug a bin \ che lo ha risolto

Progetto> Proprietà> Crea> Percorso di output

Spero seriamente che questo aiuti.


0

Sono stato confuso dallo stesso maledetto problema. Ho provato a rimuovere e e il fileglobal.asax (chiuso VS2010 prima di aggiungere). Ripulito il progetto / soluzione, verificato eventuali modifiche nella configurazione dell'applicazione Web e altri elementi che avevano funzionato per altre persone qui nei thread SO. Alla fine ho ripulito la soluzione, eliminato le cartelle bin / obj e fermato tutti i server di sviluppo VS2010 in esecuzione, quindi ho ripristinato tutte le modifiche e ho scoperto che l'applicazione era di nuovo in esecuzione. Ho rifatto le stesse cose e ora funziona bene.

È successo di nuovo e questa volta questa soluzione ha funzionato per me.


0

vai a Configuration Manager sotto le proprietà della tua soluzione. Quindi assicurati che tutti i progetti siano in fase di realizzazione, e questo non sarà un problema.


0

Ho dovuto eliminare (duplicare) i file dal disco che non erano inclusi nel progetto. Sembra che i duplicati siano stati causati da una ridenominazione non riuscita. I nomi dei file erano diversi, ma lo stesso codice.

Dopo aver eliminato tutti i file oof. * Sono stato in grado di scansionare.

  • foo.aspx
  • foo.aspx.cs
  • foo.aspx.designer.cs
  • oof.aspx
  • oof.aspx.cs
  • oof.aspx.designer.cs

0

nel mio caso era IISExpress che puntava alla stessa porta di IIS per risolverlo

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

e cerca la porta, troverai il <site>...</site>tag che devi rimuovere o commentarlo


0

Ho riscontrato questo problema durante la distribuzione solo su prod server. Negli altri miei ambienti funziona ... Ho appena cancellato cose nella cartella bin, quindi ripubblicato e dopo funziona.


0

Se stai usando Visual Studio, probabilmente stai cercando di eseguire l'applicazione in modalità di rilascio, prova a cambiarla in modalità di debug.


0

Ho provato a ricostruire la soluzione e cancellare i file temporanei ASP.NET senza successo.
Ma dopo aver eseguito IISRESET l'errore è scomparso.

Aggiornamento : ho avuto di nuovo lo stesso problema 1 mese dopo. Ho notato che MyWebsite.DLL esiste nella cartella bin, ma non esiste nei file temporanei ASP.NET (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files). Ho provato alcune cose, suggerite su questo e "Parser Error Message: Could not load type" nelle domande Global.asax (in realtà ho dimenticato la mia risposta), ma l'errore è scomparso di nuovo solo dopo IISRESET


0

Bene, nel mio caso VS 2017, il carico della soluzione leggera stava causando questo problema. L'ho disabilitato e riavviato VS, quindi ho ricostruito la mia soluzione e il problema è sparito.


2
Qual è la soluzione "leggera"?
Fandango68

0

Volevo solo aggiungere i miei due centesimi. Ho ricevuto lo stesso errore e ho provato tutti i suggerimenti senza alcun risultato. La mia situazione è probabilmente diversa?

È venuto fuori che un file "AssemblyInfo.cs" generato automaticamente aveva degli spazi estranei, che mi impedivano di avviare l'app web (tramite debug). Ecco come appariva il file:

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

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

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

Dopo aver eliminato gli spazi in AssemblyCompany e AssemblyCopyright, sono stato finalmente in grado di costruire e lanciare il progetto.

Osservato nel seguente ambiente: --Visual Studio 2017 Community version 15.3.0 --Win 7 x64 Enterprise --New Project> Visual C #> Web> ASP.NET Web Application> Web Forms

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.