"Impossible de charger le type [Namespace] .Global", ce qui me cause du chagrin


106

Dans mon application .Net 2.0 Asp.net WebForms, j'ai mon Global.asax contenant le code suivant:

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

Cependant, lorsque je construis, j'obtiens une erreur indiquant:

Impossible de charger le type «MyNamespace.Global».

Cela semble être dû au fait que l'espace de noms MyNamespace (défini dans le code derrière le fichier Global.asax.cs) n'est pas vu par le compilateur dans le fichier Global.asax (ne s'affiche pas dans R # intellisence ..). Cela s'est avéré être une noix très difficile à casser ... toute aide sera appréciée!

Remarque: Global.asax et Global.asax.cs se trouvent dans le même dossier.

Note 2: lors de la compilation à partir de l'invite vs avec csc, il se compile correctement


Les autres pages de l'application fonctionnent-elles? Parfois, cela se produit lorsque le serveur Web est configuré pour exécuter 1.1 mais que l'application est compilée pour 2.0
Noon Silk

oui, 'Target Framework' est 2.0
gkdm

Réponses:


162

Une situation que j'ai rencontrée et qui a causé ce problème est lorsque vous spécifiez la plate-forme pour une construction via "Build Configuration".

Si vous spécifiez x86 comme plate-forme de construction, visual studio attribuera automatiquement bin / x86 / Debug comme répertoire de sortie pour ce projet. Cela est parfaitement valable pour les autres types de projets, sauf pour les applications Web où ASP.NET s'attend à ce que les assemblys soient générés dans le dossier Bin.

Ce que j'ai trouvé dans ma situation, c'est qu'ils étaient envoyés aux deux (Bin et Bin / x86 / Debug), à l'exception que certaines des dll, et inexplicablement la plus importante étant votre dll d'application Web, manquant dans le Bin dossier.

Cela a évidemment causé un problème de compilation et par conséquent l'exception "Impossible de charger le type Global". Le nettoyage de la solution et la suppression des assemblys n'ont fait aucune différence pour les générations suivantes. Ma solution consistait simplement à changer le chemin de sortie dans les paramètres du projet pour l'application Web en Bin (plutôt que bin / x86 / Debug).


13
Aussi: essayez de fermer et de rouvrir VS. Si vous utilisez un serveur de débogage intégré, il se peut qu'il exécute un site Web différent. L'ouverture / la fermeture réenregistrera les ports de l'hôte local.
BradLaney

1
Dans mon cas, il voulait mettre la sortie du projet dans inetpub \ wwwroot \ myproject \ bin, mais j'avais configuré iisexpress pour regarder dans myProject \ bin. Le simple fait de changer le chemin de sortie a résolu le problème.
shindigo

Dans mon cas, j'avais un .dll qui aurait dû être inclus, mais qui n'était pas configuré pour «copier local» pour une raison quelconque. Cela a causé un problème de compilation similaire à celui indiqué dans cette réponse.
HockeyJ

Merci, Stantona. C'est ce qui a fonctionné pour moi, et juste à temps pour que je rentre chez moi.
Bill Norman

3
La modification du chemin de sortie du projet vers le dossier bin a résolu le problème. Merci d'avoir sauvé ma journée!
Tunahan

18

Avez-vous changé l'espace de noms de votre projet? J'ai vu cela se produire occasionnellement lorsque j'ai modifié l'espace de noms dans la boîte de dialogue Propriétés du projet, mais Visual Studio n'a pas modifié la namespacedéclaration dans les fichiers de code existants.


Que penses-tu que je devrais faire?
gkdm

1
Vérifiez l'espace de noms dans votre fichier .cs et assurez-vous qu'il est le même que celui déclaré dans le fichier asax. Je soupçonne qu'ils seront différents ...
PhilPursglove

Je ne suis pas sûr alors. Tout ce que je peux suggérer pour le moment est de reconstruire et de vérifier le contenu des espaces de noms dans votre assemblage avec ILDASM.
PhilPursglove

Merci, c'est la solution qui m'a aidé. J'utiliserai Resharper pour vérifier tous les espaces de noms dans ma solution.
Leonard

Je viens de faire cela: dans un projet MVC 5 (pas que cela compte) et j'ai changé l'espace de noms du projet mais j'ai oublié de changer le Global.asax (et le dossier App_Start). Indépendamment de l'expérience, parfois les oubliettes stupides vous attirent toujours.
Jason Snelders

15

Je suis nouveau dans le développement asp .net et j'ai rencontré le même problème.

J'ai mis à jour la classe en tant que partialclasse et cela a bien fonctionné.

public partial class Global : System.Web.HttpApplication

1
Je ne sais pas pourquoi mon fichier Global s'était retrouvé sans cela, mais c'était le problème pour moi, merci!
ginja

9

J'ai redémarré Visual Studio et l'erreur a disparu!


2
la même chose a fonctionné pour moi. Assurez-vous de fermer TOUS Visual Studio ouvert.
alansiqueira27

5

En voici un autre pour les livres. Il semble que cela se produit lorsque vous lancez plusieurs applications Web à partir du même numéro de port.

En gros, j'ai quelques branches sur lesquelles je travaille, j'ai une branche principale et une branche intermédiaire et une branche release. Lorsque j'ai changé de branche vers la branche intermédiaire, j'ai remarqué qu'elle utilisait la même configuration d'adresse de port, j'ai donc choisi de changer cela. J'ai ensuite reçu un autre avertissement indiquant que cette réservation était en conflit avec une autre application configurée. Le serveur IIS Express est sensible à ce sujet et pour quelque raison que ce soit, il modifie la configuration.

En choisissant simplement un troisième port non affecté, ce problème a disparu car il mappe ensuite le port à un nouveau mappage de répertoire (mes branches sont situées différemment sur le disque). J'ai remarqué cela parce que j'ai essayé de changer le nom du type pointé par, Global.asaxmais le nom du type était inchangé même après le redémarrage du serveur, donc clairement, le code que je changeais n'était pas reflété par le déploiement IIS Express.

Donc, avant de perdre trop de sommeil à ce sujet, essayez de modifier le numéro de port IIS actuellement utilisé pour exécuter le projet Web.


5
  1. Cliquez avec le bouton droit sur Project Solution et sélectionnez Batch Build.
  2. Sélectionnez ensuite le nom de votre projet et Nettoyez et reconstruisez.

Fonctionne bien pour moi dans VS 2015. Maintenant, je peux utiliser l'événement mondial. Mon Global.asaxfichier a cette ligne

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

Et je crée un fichier de classe Global.asax.csqui se trouve dans un AppCodedossier qui ressemble à

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

J'espère que cela aidera


3

Vérifiez l'action de génération de Global.asax.cs. Il doit être défini sur Compile.

Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Global.asax.cs et accédez à Propriétés. Dans le volet Propriétés, définissez l'action de génération ( sans débogage).

Il semble que VS 2008 n'ajoute pas toujours correctement les fichiers .asax (.cs) par défaut.


3

J'ai rencontré une erreur similaire lors d'un

<clear/>

tag en tant qu'enfant (le premier enfant) du

<assemblies>

tag dans mon Web.config . J'avais inséré les balises dans mon web.config pour tenter d'empêcher l'héritage de configuration dans une application déployée sous le «site Web par défaut» dans IIS.


Cela m'a définitivement orienté dans la bonne direction. En fin de compte, j'avais mis <clear /> dans le répertoire parent car c'était un espace réservé vide. Je crois que le vrai problème était qu'il effaçait les assemblys référencés par mon application, ce qui empêchait l'assembly d'application de se charger.
Doug Lampe

J'ai aussi expérimenté cela - supprimer explicitement les assemblages sélectionnés au lieu d'effacer la liste a bien fonctionné.
Arve Systad

2

Dans ma situation, il était lié au type de site Web / application Web du projet. Nous sommes récemment passés à MVC et avons dû le changer en Application Web.

La solution était donc simple: sélectionnez votre site Web dans l'Explorateur de solutions et supprimez-le de la solution, puis faites un clic droit sur la solution et sélectionnez Ajouter -> Projet existant ( pas de site Web ), recompilez le site Web.


2

Ancien message, mais je fais cette erreur en essayant de convertir un projet de site Web en projet d'application Web.

Suivez les instructions sur ce lien . J'ai toujours l'erreur global.asax mais tout ce que j'ai fait a été de le supprimer et de le rajouter en cliquant avec le bouton droit sur le projet dans Visual Studio et en sélectionnant Ajouter un nouvel élément. Ajoutez le fichier global.asax et cela a fonctionné.


2

Aucun de ceux-ci n'a fonctionné pour moi, malheureusement. Le correctif que j'ai trouvé était plus spécifique au développement, en particulier au débogage sur votre machine locale. Malheureusement, cela ne résout pas vraiment le problème comme je l'espérais, mais si vous êtes à bout de souffle, cela pourrait vous permettre de recommencer.

TL; DR: Dans les propriétés du projet, dans l'onglet Web, sous Serveurs, sélectionnez Utiliser le serveur Web IIS local. L'adresse,

http://localhost/MyApp" 

était déjà rempli (j'ai IIS7, .NET 4.0). Ce qui a été initialement sélectionné était «Utiliser Visual Studio Development Server» avec un chemin virtuel de «/»

Ce qui est vraiment déroutant pour moi, c'est le fait que rien d'autre n'a fonctionné, j'ai parcouru toutes les suggestions que j'ai pu trouver sur SO, et rien ne fonctionnait. La chose étrange est que l'erreur s'est (apparemment, cela fait quelques mois que j'ai regardé pour la dernière fois) s'est manifestée lorsque j'ai ajouté un nouveau fichier ascx qui était similaire à un fichier existant qui a été ajouté à partir d'un ancien projet .net 2.0 (je pense) cela permettrait une gestion personnalisée des utilisateurs depuis l'application. Cela fonctionnait, magnifiquement, pendant longtemps, jusqu'à ce que j'essaye d'ajouter ce nouveau fichier. Après l'avoir ajouté et vu l'erreur, j'ai rapidement annulé toutes les modifications, mais l'erreur Global.ascx ne disparaîtrait pas, n'épuisant même pas tout le projet et obtenant les dernières informations du contrôle de code source.


2

J'avais converti ma solution de VS2003 à VS2010 et j'avais eu des problèmes pour convertir le projet d'application Web.

J'ai rencontré exactement le même problème et aucune des réponses n'a fonctionné pour moi.

Ce qui a fonctionné pour moi était:

  • Cliquez avec le bouton droit sur la solution et sélectionnez Configuration Manager
  • Examen de chacune des configurations dans la liste déroulante «Configuration de la solution active».
  • Inclus l'application Web dans la construction en cochant la case "Construire".

il semblerait que les problèmes que j'ai rencontrés lors de la conversion aient supprimé le projet d'application Web de la construction pour une raison quelconque.

Espérons que cette réponse aide quiconque a le même problème ...


1

Si vous reconstruisez ou modifiez un projet et déplacez des fichiers à partir d'un ancien, assurez-vous de cocher le bloc Hériter de votre fichier global. Dans mon cas, l'ancien projet / solution s'appelait intranet, et je l'avais recréé en tant qu'intranet, mais lorsque je me suis déplacé sur les fichiers, il n'aimait pas les minuscules (duh). Faites simplement une recherche générale des noms des fichiers.



1

J'ai eu un problème similaire où je recevais cette erreur sur un projet.

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

Après avoir passé un certain temps, je soupçonne une fonction avec des erreurs possibles dans une classe .. plus tard commenter cette fonction spécifique mon problème est résolu.

Je ne sais pas pourquoi Visual Studio ne m'a pas donné cette erreur spécifique au moment du débogage. Mais cette erreur peut se produire en raison d'erreurs dans le fichier de classe.


1

Ce travail pour moi: Première chose: il semble que peu importe ce que vous avez dit à Visual Studio, l'ide regarde toujours le fichier dans: bin (pour l'application web et bien sûr dans mon cas) Donc, même quand j'ai dit à Visual Studio un chemin spécifique pour charger le fichier, l'ide continue à chercher le mauvais chemin. Donc, je change dans le: Build / Configuration Manager le type de sortie en: Release (précédemment, je nettoie la solution, même manuellement) donc, lorsque le fichier .dll a été créé, je suis déplacé manuellement vers le dossier "bin" sous le projet / solution dossier. J'espère que cela vous sera utile !!


1

Dans mon cas, c'est à cause de mon processeur cible (x64) que je l'ai changé en x86, nettoyé le projet, redémarré VS (2012) et reconstruit le projet; puis il était parti.


1

Quand j'ai rencontré ce problème le plus récemment, j'ai essayé tout ce qui est mentionné ici, mais en vain. Après m'être arraché les cheveux, j'ai décidé d'essayer de supprimer toute ma base de code (oui, assez désespérée!), Puis de tout télécharger à nouveau à partir de mon référentiel de code. Après avoir fait cela, tout a bien fonctionné une fois de plus.

Cela semble être une solution extrême, mais j'ai juste pensé l'inclure ici car cela n'a pas été mentionné auparavant dans ce fil.

(Notez que l'autre fois que j'ai rencontré ce problème, c'est quand le Global.asax héritait d'un composant qui devait être enregistré sur la machine hôte. Cela manquait donc j'ai eu ce même problème).

TL, DR; Si toutes les réponses de ce fil de discussion ne fonctionnent pas pour vous, essayez de supprimer puis de télécharger à nouveau l'intégralité de votre base de code!


1

J'ai rencontré ce problème à quelques reprises et dans chaque cas, je reconstruisais un ordinateur ou je passais à un nouvel ordinateur. Ma première étape (en plus de mettre à jour la machine et d'installer Visual Studio) consiste à extraire mes projets de Git et à les tester.

J'ai rencontré cette erreur à chaque fois parce que j'ai essayé d'accéder à mon code local avant de le compiler. Vous voyez, j'ai configuré Git et Subversion pour ignorer mes dossiers bin / build, donc après une extraction de mon référentiel, j'ai oublié d'exécuter une construction qui extrait les packages requis de Nuget (puisque Git / SVN les ignore aussi) et crée le DLL nécessaires pour exécuter mon application.

Je doute que cela résoudra les problèmes de la plupart des gens, mais je ne l'ai pas vu sur la liste des solutions potentielles, alors j'ai pensé l'ajouter.


1

Dans mon cas, j'avais ajouté Global.asax à un projet WCF pour l'expérimenter, mais j'ai décidé de le supprimer. Je l'ai supprimé de l'Explorateur de solutions, mais comme il était toujours dans le dossier, le pipeline le trouvait toujours et provoquait cette erreur.

J'ai supprimé Global.ASAX et GLobal.asax.cs du système de fichiers et cela a résolu l'erreur.


CELA a résolu le problème pour moi, merci, mais je voudrais également ajouter pour d'autres à l'avenir que dans mon cas, je n'ai jamais ajouté Global.asax à mon projet. Mais comme mentionné ici, les fichiers global.asax et global.asax.cs se trouvaient dans mon système de fichiers. Lorsque je les ai supprimés, le bogue a disparu.
stackonfire

1

Ayant été dans le jeu de développement pendant près de 20 ans, cette châtaigne a continué à me tourmenter à travers de multiples projets.

En tant que tel, aujourd'hui, tout en rencontrant à nouveau ce même problème, par rapport à un autre projet, j'ai décidé d'enquêter plus avant et je pense que cela est lié à l'emplacement du dossier Bin ... ou plus précisément, au chemin de sortie du dossier bin.

Pour moi, pour une application Web basée sur un service simple configurée pour exécuter / déboguer via IIS, cela changeait le chemin de sortie de bin \ debug à bin \ qui le résolvait

Projet> Propriétés> Construction> Chemin de sortie

Espère sérieusement que cela aide.


0

J'ai été déconcerté par le même problème. J'ai essayé de supprimer et et le global.asax(fermé VS2010 avant d'ajouter). Nettoyé le projet / la solution, vérifié les changements dans la configuration de l'application Web et d'autres éléments qui avaient fonctionné pour d'autres personnes ici dans les threads SO. J'ai finalement nettoyé la solution, supprimé les dossiers bin / obj et arrêté tous les serveurs de développement VS2010 en cours d'exécution, puis j'ai annulé toutes les modifications et j'ai trouvé que l'application fonctionnait à nouveau. J'ai refait les mêmes choses et maintenant ça marche bien.

C'est arrivé à nouveau et cette fois cette solution a fonctionné pour moi.


0

allez dans Configuration Manager sous les propriétés de votre solution. Ensuite, assurez-vous que tous les projets et en cours de construction, et ce ne sera pas un problème.


0

J'ai dû supprimer (dupliquer) les fichiers du disque qui n'étaient pas inclus dans le projet. Il semble que les doublons aient été causés par un changement de nom échoué. Les noms de fichiers étaient différents, mais le même code.

Après avoir supprimé tous les fichiers oof. *, J'ai pu scanner.

  • toto.aspx
  • toto.aspx.cs
  • toto.aspx.designer.cs
  • oof.aspx
  • oof.aspx.cs
  • oof.aspx.designer.cs

0

dans mon cas, c'était IISExpress pointant vers le même port que IIS pour le résoudre, allez à

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

et recherchez le port, vous trouverez la <site>...</site>balise que vous devez supprimer ou commenter


0

J'ai eu ce problème lors du déploiement sur le serveur prod uniquement. Dans mes autres environnements, cela fonctionne ... Je viens de supprimer des éléments dans le dossier bin, puis de les republier et cela fonctionne ensuite.


0

Si vous utilisez Visual Studio, vous essayez probablement d'exécuter l'application en mode Release, essayez de le changer en mode Debug.


0

J'ai essayé de reconstruire la solution et d'effacer les fichiers temporaires ASP.NET sans succès.
Mais après l'exécution de IISRESET, l'erreur a disparu.

Mise à jour : j'ai eu à nouveau le même problème 1 mois plus tard. J'ai remarqué que MyWebsite.DLL existe dans le dossier bin, mais n'existe pas dans les fichiers ASP.NET temporaires (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Fichiers ASP.NET temporaires). J'ai essayé quelques choses, qui sont suggérées à ce sujet et "Message d'erreur de l'analyseur: impossible de charger le type" dans les questions Global.asax (j'ai en fait oublié ma propre réponse), mais l'erreur a disparu à nouveau seulement après IISRESET


0

Eh bien, dans mon cas VS 2017, la charge de la solution légère était à l'origine de ce problème. Je l'ai désactivé et redémarré VS puis reconstruit ma solution et le problème a disparu.


2
Quelle est la solution «légère»?
Fandango68

0

Je voulais juste ajouter mes deux cents. Je recevais la même erreur et j'ai essayé toutes les suggestions en vain. Ma situation est probablement différente?

Il s'avère qu'un fichier "AssemblyInfo.cs" généré automatiquement contenait des espaces superflus, ce qui m'empêchait de lancer l'application Web (via le débogage). Voici à quoi ressemblait le fichier:

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

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

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

Après avoir tué les espaces dans AssemblyCompany et AssemblyCopyright, j'ai finalement pu créer et lancer le projet.

Observé dans l'environnement suivant: --Visual Studio 2017 Community version 15.3.0 --Win 7 x64 Enterprise --Nouveau projet> Visual C #> Web> Application Web ASP.NET> Web Forms

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.