«Message d'erreur de l'analyseur: impossible de charger le type» dans Global.asax

203

Je travaille sur un projet MVC3 et je reçois l'erreur suivante:

Message d'erreur de l'analyseur: impossible de charger le type «GodsCreationTaxidermy.MvcApplication».

Erreur source:

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

L'erreur que je reçois est impossible de charger GodsCreationTaxidermy.Core.MvcApplication mais dans cette capture d'écran, la partie Core ne s'affiche pas dans l'erreur:

Capture d'écran de la page d'erreur

Quelqu'un at-il des idées ou une solution à cette erreur?

PsychoCoder
la source
8
Avez-vous vraiment la classe GodsCreationTaxidermy.Core.MvcApplication dans votre application? Sinon, veuillez le créer et compiler le projet. Cela fonctionnera à coup sûr.
Shailesh
4
Oui, j'ai GodsCreationTaxidermy.Core.MvcApplication (Global.asax.cs)
PsychoCoder
Le fichier Global.asax qui semble être utilisé (selon la capture d'écran) est différent de celui que vous avez montré.
Darin Dimitrov
vérifiez si la chaîne Inherits est la même que le chemin d'accès à la classe dans votre application (namespace + pathname), c'est-à-dire qu'ils sont tous les deux GodsCreationTaxidermy.Core.MvcApplication
linkerro
C'est l'un des problèmes Darin, peu importe ce que je fais, il laisse toujours la partie Core
PsychoCoder

Réponses:

175

Votre serveur Web local exécute un code différent de celui sur lequel vous travaillez réellement. Assurez-vous que vous avez arrêté le débogage, arrêtez votre serveur Web local, nettoyez et reconstruisez comme Peter l'a suggéré, revérifiez vos global.asax et global.asax.cs et réessayez.

Si cela ne fonctionne pas et que vous utilisez IIS local, essayez de supprimer le site dans le Gestionnaire IIS et de le recréer manuellement.

Ratio de Facio
la source
4
Erreur très étrange en effet. J'ai déployé sur IIS sur le serveur et j'ai obtenu ceci. Nettoyé et recompilé a fonctionné pour moi aussi.
Piotr Kula
2
Nettoyer / Reconstruire + recréer le répertoire virtuel, puis cela a fonctionné.
fantastik78
4
J'ai eu le problème lorsque j'ai eu le même projet ouvert dans deux instances de Visual Studio. Par conséquent, j'avais deux instances d'IIS Express en cours d'exécution. J'ai dû en fermer un, puis il a été résolu.
lvmeijer
4
Vous pouvez également essayer de supprimer les dossiers bin / obj dans votre projet.
arni
1
J'ai suivi ces instructions et jeté quelques nettoyages / reconstructions supplémentaires, changé l'espace blanc dans le fichier .asax, reformaté mes moniteurs et fait un gabarit jaunty accompagné des tuyaux de Pan et cela semblait faire l'affaire.
MrBoJangles
207

Vérifiez que le chemin de sortie du projet (propriétés du projet / Build) est défini sur binet non bin\Release oubin\Debug

Pour une raison quelconque, IIS (VS development Server ou Local IIS) accède toujours aux bibliothèques à partir du binrépertoire (et ne recherchera pas les sous-répertoires)

Vincent de Lagabbe
la source
27
Un crédit là où il est dû. Correction de mon problème, mon application était configurée pour utiliser bin \ Debug, le changer en bin l'a résolu. Merci beaucoup.
Joey Bob
Il était intéressant d'apprendre que les projets ASP.NET n'utilisent pas le chemin de sortie par défaut bin / $ (Configuration) /. Merci beaucoup pour la réponse!
Jaanus Varus
2
@JamesPusateri: faites attention cependant. Chaque fois que vous lancez, il utilisera le contenu de / bin. Donc, probablement le résultat de cette construction que vous avez faite après l'avoir modifiée.
Vincent de Lagabbe
1
Wow, à 2018, IIS fonctionne toujours de cette façon. Mauvais, très mauvais pour Microsoft. Merci!
Rodrigo T.
1
rien n'a changé depuis près de 7 ans, les conseils aident toujours
Yuriy Vikulov
33

Essayez de modifier votre fichier global.asax (ajoutez simplement un espace quelque part) et réexécutez. cela forcera le serveur Web intégré à actualiser et recompiler le fichier global.asax.

Faites également un nettoyage et une reconstruction - devrait résoudre le problème

Peter Munnings
la source
4
La modification de global.asax n'a rien fait pour moi, mais un nettoyage et une reconstruction ont résolu le problème :)
NightShovel
J'ai eu ce problème lorsque j'ai manqué de courant. Le nettoyage et la reconstruction ont aidé. Merci!
Gorgi Rankovski
Le nettoyage a échoué. Échec de construction. Je n'ai eu aucun problème avec mon chemin de construction. Cependant, cela a fait l'affaire. Merci!
egandalf
Merci pour votre réponse M. Munnings
dada
30

Cela se produit parfois si vous modifiez les informations d'espace de noms (niveau projet ou classe) après la global.asaxgénération de.

Clic droit sur le Global.asax fichier et sélectionnez "Ouvrir avec" puis sélectionnez "Editeur XML (texte) avec encodage" (d'autres éditeurs peuvent également fonctionner, mais c'est ce que j'utilise).

Modifiez ensuite la section "Hérite" dans la directive XML

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

afin qu'il corresponde au nom complet réel de votre classe Application. Et c'est tout.

Une autre option consiste à copier tout votre code à partir de Global.asax.cs, puis à supprimer et à créer un autre fichier Global.asax (puis à recopier le code dans Global.asax.cs).

Paul Pâques
la source
Cela a également fonctionné pour moi. J'avais changé l'espace de noms de l'assembly pour tous les projets de la solution. Nous Global.asaxavons donc dû modifier le fichier comme indiqué dans cette réponse et le faire correspondre à ce qui se trouve dans les paramètres de configuration du projet.
Shiva
21

J'ai fermé et rouvert Visual Studio et cela a fonctionné.

Gagan
la source
4
fermez TOUT votre studio visuel
Jboy Flaga
11
D'abord, nous devrions tous essayer de sortir de la voiture, de fermer toutes les portes, puis de rentrer à nouveau.
pajics
non, vous devez fermer les portes de TOUTES vos voitures en même temps.
BlackICE
17

Je devais aller dans BUILD -> CONFIGURATION MANAGER et - ahem - cocher la case à côté de mon projet pour m'assurer qu'il soit réellement construit.

Ron Newcomb
la source
2
Je ne comprends pas le downvote. Cela aurait pu potentiellement être une solution. C'est en fait plus pertinent que la plupart ne le pensent ... S'il n'est pas coché, ce n'est pas toujours l'endroit le plus évident. Surtout quand il y a plusieurs configurations.
Anthony Mason
J'aime ta réponse et ton raisonnement!
UKM
1
C'était aussi mon problème, et je n'ai aucune idée de comment les projets ont été désélectionnés de la configuration.
Seth
5

J'ai eu ce problème aujourd'hui, et il m'a fallu un certain temps pour trouver la cause.

Fondamentalement, mon projet VS2015 principal incluait un sous-projet qui avait été construit à l'aide d'une version supérieure de .Net Framework.

Bizarrement, lorsque vous rencontrez ce problème, VS2015 signalera avec plaisir que la solution a bien fonctionné, mais lorsque vous essayez et exécutez le site Web, cela vous donne simplement cette erreur trompeuse, suggérant que votre Global.asax.csfichier est incorrect.

Donc, si vous voyez cette erreur et que le nettoyage / la reconstruction n'aide pas, ouvrez l' Referencesarborescence de votre projet et recherchez les points d'exclamation.

entrez la description de l'image ici

Vérifiez également dans votre Outputfenêtre les messages comme celui-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".

La solution, bien sûr, consiste à cliquer avec le bouton droit sur votre projet principal, à sélectionner l'onglet supérieur, "Application", et à changer la version de Framework cible pour une version supérieure qui correspond à votre sous-projet.

Il est ennuyeux que Visual Studio 2015 vous permette de créer et d'exécuter entièrement des solutions qui contiennent tranquillement ce problème. C'est demander des ennuis ..!

Mike Gledhill
la source
2

Vous pouvez également vérifier les propriétés de votre site dans IIS. (Dans IIS, cliquez avec le bouton droit sur le site et choisissez Propriétés.) Assurez-vous que le paramètre Chemin d'accès physique pointe vers le chemin correct pour votre application et non vers une autre application. (Cela a corrigé cette erreur pour moi.)

Rob Cole
la source
2

Je viens de rencontrer cela sur une application MVC5 et rien ne fonctionnait pour moi. Cela s'est produit juste après que j'aie essayé de faire un SVN pour revenir à une ancienne version du projet.

J'ai dû supprimer global.asax.cs, puis en ajouter un nouveau en cliquant avec le bouton droit sur Projet -> Ajouter un nouvel élément -> Global.asax et QUE finalement il a corrigé.

Je pensais juste que ça pourrait aider quelqu'un.

iAteABug_And_iLiked_it
la source
Si cela le corrige pour vous, il y a probablement quelque chose de gâché dans la propriété "Build action" du global.asax.csfichier existant . Il doit être défini sur "Compiler". L'action de génération du global.asaxfichier lui-même doit être définie sur "Contenu".
Steven Liekens
J'ai fait exactement ce qu'a fait @iAteABug_And_iLiked_it, et le problème a été résolu!
zinczinc
2

Je dois signaler que j'ai essayé au moins 4 suggestions de ce post. Aucun d'eux ne fonctionnait. Pourtant, je suis heureux d'annoncer que j'ai récupéré en récupérant de la sauvegarde. Je n'ai eu qu'à mettre à jour mes dernières modifications de code à partir du fichier journal. A pris moins de 10 minutes. J'ai passé 3 fois plus de temps à lire cet article et à essayer d'autres suggestions. Désolé.

C'était une erreur très étrange. Bonne chance à tous ceux qui rencontreront ce gremlin.

htm11h
la source
2

J'ai le même problème lorsque j'ai 2 instances de Visual Studio exécutant le même projet. J'ai donc fermé Visual Studio et ouvert une seule instance et cela fonctionne bien maintenant!

Seyed Morteza Mousavi
la source
2

Je travaillais sur un ancien projet Web ASP.NET basé sur un dossier (que je déteste) - et j'ai trouvé que c'était ma solution:

Créez un App_Codedossier (si vous n'en aviez pas déjà un)

Déplacez le Global.asax.vbfichier dans le App_Codedossier

Le balisage dans Global.asax peut laisser de côté tout espace de noms (au moins, pour ce style de projet, afaik):

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

... où "MyApp" est le nom de la classe définie dans Global.asax.vb

bkwdesign
la source
2

"BUILD -> CONFIGURATION MANAGER et - ahem - cochez la case à côté de mon projet pour vous assurer qu'il est bien construit." Cela et aller dans le dossier du projet dans l'explorateur Windows, en appuyant sur les options et en décochant la case "Lecture seule" a aidé.

Catastrophe
la source
cela a simplement fonctionné pour moi. Le projet n'a pas d'option de construction activée, je ne sais pas pourquoi, mais cette solution de contournement était ce dont j'avais besoin, merci.
willyMon
1

Videz le dossier bin. Générez toutes les bibliothèques de classes dépendantes et référez-les dans le projet principal, puis générez la solution complète.

La source

Vignesh Subramanian
la source
1

Moi aussi, j'ai été confronté au même problème. Malgré le fait de suivre chaque réponse, cela n'a pas fonctionné. Ensuite, j'ai changé le "Inherits = namespace.class " en "Inherits = nom d'assemblage complet ", c'est-à-dire "Inherits = namespace.class, assemblyname, Version =, Culture =, PublicKeyToken = " J'espère que cela aide.

Mahesh
la source
1

Cela peut également se produire si vous oubliez accidentellement de définir votre solution VS sur "Projets de démarrage multiples" si vous exécutez un Web et WebApi à partir de la même solution.

Vous pouvez le vérifier en cliquant avec le bouton droit sur Solution dans l'explorateur de solutions et en sélectionnant «Propriétés». Recherchez ensuite «Projets de démarrage».

Dave Black
la source
Le mien était similaire à ceci: je courais le mauvais projet d'API dans la solution. En fait, j'avais une erreur de compilation dans l'API que je pensais exécuter, mais VS ne l'a pas détectée lorsque j'ai exécuté la solution, même après un nettoyage.
John
1

Supprimez le .vsrépertoire de la racine de la solution. Nettoyer. Reconstruire.

Ce problème me rend fous de temps en temps et je finis inévitablement ici par pagination à travers les réponses. Je soupçonne que plusieurs causes peuvent produire cette exception, cela fonctionne une fois pour moi.

Patrick Borkowicz
la source
Plusieurs heures d'essayer mille autres suggestions et c'est celle qui l'a fait pour moi. Mon application fonctionnait bien dans Visual Studio, à la fois dans les configurations de débogage et de version, mais une fois publiée sur IIS, j'obtenais l'erreur. La suppression du dossier .vs et le redéploiement ont résolu le problème.
Philip Stratford
1

Oui, j'ai lu toutes les réponses. Cependant, si vous êtes moi et que vous avez retiré tout ce qui reste de vos cheveux, essayez de vérifier le dossier \ bin. Comme la plupart des fichiers proj peuvent avoir plusieurs configurations regroupées sous l'élément XML PropertyGroup, j'ai changé la OutputPathvaleur de «bin \ Debug» pour supprimer la partie «\ Debug» et reconstruire. Cela a placé les fichiers dans le dossier \ bin permettant à Express IIS de rechercher et de charger la génération. Je me demande quelle est la bonne façon de gérer ces différentes versions afin qu'un déploiement de débogage local puisse trouver et charger l'environnement cible.

Adam Cox
la source
C'est la seule chose qui a fonctionné. Tant de corps enterrés ... c'est des trucs comme ça qui me font sérieusement penser à d'autres vocations.
doveryai
0

Ce problème m'a été résolu en donnant la bonne autorisation du dossier ainsi que la vérification d'IIS.

J'ai été autorisé à tout le monde pendant que je teste dans mon environnement local. Mais en mode publication, je pense que nous ne donnons que la permission à l'utilisateur ASP.Net.

Ajay2707
la source
0

J'ai également eu la même erreur ... vérifiez le nom de l'application que vous avez développée correctement, c'est-à-dire. l'espace de noms et le nom d'assembly alloués et essayez également de modifier physiquement le nom du dossier créé pour l'application, tout cela doit être le même que le nom dans l'espace de noms ci-dessus présent dans le fichier global.asax

Bhavik
la source
0

J'ai également la même erreur ... vérifiez la configuration IIS de votre répertoire virtuel et assurez-vous que Propriétés - ASP.NET - Version ASP.NET est la même que Propriétés du projet - Application - Framework cible. (Cela a corrigé cette erreur pour moi.)

montearg70
la source
0

Mon application a été construite dans une ancienne version de VS et n'avait pas de dossier bin. Je l'avais mis à niveau vers une version plus récente et j'ai eu un cauchemar à le déployer. J'ai finalement retrouvé cette erreur dans le projet> Propriétés> Application. Le cadre cible a été fixé à 2,0; le changer sur le serveur pour qu'il corresponde dans le gestionnaire IIS / App Pool a résolu le problème pour moi.

jeffe65
la source
0

J'ai trouvé que la modification de l'espace de noms sur le projet, sans refactoriser cela sur l'ensemble de la solution était mon problème. Vérifiez les propriétés de votre projet et voyez quel est votre espace de noms, assurez-vous que les lignes s'alignent sur l'ensemble du tableau.

Hadley
la source
0

Le problème pour moi est que je n'ai pas inclus global.asax.cs dans mon projet. Et parce que je copiais des fichiers d'un .net 4.5 vers un 4.0, je n'ai pas commenté les lignes qui ne sont pas nécessaires dans 4.0. Parce qu'il n'était pas inclus, Visual Studio l'a compilé de toute façon sans problèmes. Mais quand je l'ai inclus, il a mis en évidence les lignes qui causent des problèmes.

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);
        }
    }
}
Satbir Kira
la source
0

J'ai passé littéralement une journée à essayer de résoudre ce problème.

La seule chose qui a fonctionné a été de supprimer le fichier .sln, d'en créer un nouveau et de rajouter les projets un par un.

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

Stachu
la source
0

Pour mon cas, l'assembly Web faisait partie de GAC ... donc après la construction, il doit être installé dans GAC et cela a fonctionné.

Vishnu
la source
0

J'ai rencontré ce message d'erreur et j'ai finalement découvert que le message d'erreur était trompeur. Dans mon cas, il semble y avoir eu un problème de routage dans IIS qui a provoqué la lecture de global.asax d'un autre site sur le serveur Web, générant ainsi l'erreur.

Dans IIS, mon site était lié à http: * 80: webservices.local et contenait une application appelée MyAPI. J'ai reçu le message redouté lors de l'appel de l'application MyAPI à l'aide de l'adresse IP du serveur Web.

Afin d'appeler avec succès mon application, j'ai dû ajouter une entrée de fichier hôte pour webservices.local sur toutes les machines qui ont appelé l'application MyAPI. Ensuite, toutes mes demandes ont dû être préfixées avec http: //webservices.local/MyAPI/ afin de router correctement.

Sheldon
la source
0

J'ai essayé absolument tout ici et rien n'a fonctionné. Mon projet était dans VS 2013. J'ai depuis mis à niveau vers VS 2015 et j'ai créé toutes mes nouvelles applications en 2015 mais en chargeant, compilant, construisant etc. toutes mes anciennes applications qui ont été construites en 2013 dans cette version.

J'ai fini par charger la solution en 2015 et elle l'a résolue pour moi.

Blair Holmes
la source
0

J'ai passé plusieurs jours sur ce problème. Je l'ai finalement résolu avec la combinaison suivante de suggestions de ce post.

  1. Modifiez la cible de la plate-forme sur N'importe quel processeur. Je n'avais pas cette configuration actuellement, j'ai donc dû aller dans Configuration Manager et l'ajouter. Je compilais spécifiquement pour x64. Cela seul n'a pas résolu l'erreur.
  2. Remplacez le chemin de sortie par au bin\lieu de bin\x64\Debug. J'avais déjà essayé plusieurs fois avant de changer la cible de la plateforme. Cela n'a jamais fait de différence autre que d'obtenir une erreur indiquant qu'il n'a pas pu charger l'assembly en raison d'un format non valide.

Pour être clair, j'ai dû faire les deux avant de commencer à travailler. Je les avais essayés individuellement plusieurs fois mais cela ne l'a jamais corrigé avant d'avoir fait les deux.

Si je rétablis l'un de ces paramètres sur l'original, j'obtiens à nouveau la même erreur, malgré l'exécution de Clean Solution et la suppression manuelle de tout dans le binrépertoire.

Drew Chapin
la source
0

Deux façons d'y parvenir:

  • Le gestionnaire de configuration affiche les builds dll comme un mélange de builds '64' et 'any cpu'. Les mettre tous dans la même version le corrige.

  • Lors du basculement entre les branches, le chemin express IIS n'est parfois pas mis à jour. Cliquez avec le bouton droit sur 'IIS Express' dans la barre des tâches> Afficher toutes les applications et vérifiez que le chemin est vers la bonne branche.

Carra
la source