asp.net - when - try catch asp net




Erreur ASP.Net: "Le type 'foo' existe à la fois dans" temp1.dll "et" temp2.dll "(pt 2) (8)

Solution:

J'avais aussi déplacé des fichiers ashx et asmx en même temps. L'attribut Class des directives WebService / WebHandler a été pointé vers le mauvais espace de noms. La morale de l'histoire est de s'assurer que vous affichez le balisage pour tous as*x fichiers as*x vous changez l'espace de noms pour en cliquant-droit sur eux et en choisissant "View Markup".

Je rencontre le même problème que dans cette question et ce lien , mais aucune des réponses n'a résolu mon problème. (edit: La configuration de l'attribut batch web.config fonctionne, mais c'est un coverup, pas une solution)

Le problème que j'ai est avec un contrôle d'utilisateur que j'ai déplacé du répertoire de racine à un sous-répertoire dans le même projet d'application Web. Il fonctionnait bien avant de le déplacer. Quand je l'ai déplacé, il a commencé à me donner le message d'erreur.

Il est dit que le nom de classe existe dans deux fichiers dll dans les fichiers temporaires ASP.NET. Effectivement, quand j'ouvre Reflector, c'est dans deux DLL.

Si je renomme le fichier class et ascx, tout fonctionne correctement. Aucune utilisation du nom d'origine n'existe dans aucun des fichiers de mon application complète. Lorsque je renommer le fichier, j'ai ouvert tous les fichiers dll dans les fichiers temporaires ASP.NET avec Reflector, et aucune référence au nom de classe d'origine n'existe.

Alors, où est cette référence fantôme venant de comment puis-je résoudre ce problème?

Mise à jour: J'ai littéralement grepped chaque fichier dans mon répertoire de travail pour la solution et mon répertoire temporaire pour l'ancien nom de classe et supprimé tous les fichiers qui le contenait. J'ai ensuite renommé le nom original, brisé et j'ai toujours l'erreur.

Erreur serveur dans l'application '/' Erreur de compilation Description: Une erreur s'est produite lors de la compilation d'une ressource requise pour traiter cette demande. Veuillez vérifier les détails d'erreur spécifiques suivants et modifier votre code source de manière appropriée.

Erreur de compilation ssage: CS0433: Le type 'ASP.dashboard_badusercontrol_ascx' existe à la fois dans 'c: \ Docunts and Settings \ me \ Paramètres locaux \ Temp \ Fichiers ASP.NET temporaires \ root \ 3c2b7e1f \ 2e8a7620 \ App_Web_badusercontrol.ascx.a57ad085.iljdmp1p .dll 'et' c: \ Docunts et paramètres \ moi \ Paramètres locaux \ Temp \ Fichiers ASP.NET temporaires \ root \ 3c2b7e1f \ 2e8a7620 \ App_Web_bhdqaimy.dll '

Erreur de source:

Ligne 1098: Ligne 1099:
[System.Diagnostics.DebuggerNonUserCodeAttribute ()] Ligne 1100: private global :: ASP.dashboard_badusercontrol_ascx @__ BuildControlMyBadUserControl () {Ligne 1101:
global :: ASP.dashboard_badusercontrol_ascx @__ctrl; Ligne 1102:

Fichier source: c: \ Docunts and Settings \ moi \ Paramètres locaux \ Temp \ Fichiers ASP.NET temporaires \ root \ 3c2b7e1f \ 2e8a7620 \ App_Web_foo.aspx.a57ad085.1nw6dais.0.cs Ligne: 1100

Edit: Ok, donc j'ai fait d'autres tests sur ce qui fonctionne et ne fonctionne pas. Supposons que le nom de fichier d'origine était "BadUserControl.ascx" dans l'espace de noms "MyNamespace".

J'ai déplacé le fichier dans un répertoire appelé "NewDirectory" et changé l'espace de noms en "MyNamespace.NewDirectory". Il n'y a aucune copie de "BadUserControl.ascx" ailleurs sur mon disque dur. J'ai revérifié mon historique TFS pour m'assurer que la seule différence est l'ajout de ".NewDirectory" à l'espace de noms dans les fichiers de balisage et de code-behind.

A l'intérieur de cet espace de noms se trouvent deux autres contrôles utilisateur nommés "OtherUserControl" et "AnotherUserControl".

Cette situation échoue: j'ai 2 directives Register:

<%@ Register src="BadUserControl.ascx" tagname="BadUserControl" tagprefix="uc1" %> 
<%@ Register src="OtherUserControl.ascx" tagname="OtherUserControl" tagprefix="uc2" %>

Ces situations fonctionnent:

  1. Je garde "BadUserControl.ascx" nommé tel quel. J'ai 1 directive Register sur une page dans le même espace de noms:

    <%@ Register src="BadUserControl.ascx" tagname="BadUserControl" tagprefix="uc1" %>
  2. Je change "BadUserControl.ascx" en "GoodUserControl.ascx" J'ai 2 directives de registre:

    <%@ Register src="GoodUserControl.ascx" tagname="GoodUserControl" tagprefix="uc1" %>
    <%@ Register src="OtherUserControl.ascx" tagname="OtherUserControl" tagprefix="uc2" %>
  3. 2 Directives Register sans BadUserControl.ascx:

    <%@ Register src="AnotherUserControl.ascx" tagname="AnotherUserControl" tagprefix="uc1" %>
    <%@ Register src="OtherUserControl.ascx" tagname="OtherUserControl" tagprefix="uc2" %>

Essayez de supprimer tous les fichiers et dossiers dans le dossier "Fichiers ASP.Net temporaires", il est dans ce chemin:

c: \ windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Fichiers ASP.NET temporaires

Cela a fonctionné pour moi


Je reçois parfois ceci avec mes commandes Web. Ils vont se plaindre qu'ils existent deux fois quand je modifie un fichier différent. Je ne sais pas quelle folie est à l'origine, mais je sais que si j'appuie sur espace> sauvegarder sur le contrôle de plainte, cela force le serveur à recompiler et ça marche bien après ça.


Avec beaucoup de projets et de dossiers, il est possible que les espaces de noms soient parfois bousillés, surtout si vous essayez de forcer les choses en utilisant des déclarations d'espace de noms.

Pour voir si c'est vraiment un problème, je passerais en revue tous mes fichiers de code - .cs et .designer.cs - et enlèverai TOUTES les déclarations d'espace de noms, puis recompilerai tout pour voir si cela résout le problème.

Vous ne mentionnez pas quelle version de Visual Studio et .net vous utilisez, cela pourrait aussi aider - je me souviens d'avoir fait face à un problème similaire dans VS2005.


Ce type d'erreur est dû à l'espace de nom. Vérifiez l'espace de nom pour tous les fichiers pour vous assurer qu'il n'y a pas d'erreur d'erreur d'utilisation de l'espace de nom ou de nom.


Y a-t-il plus d'un projet dans votre solution?

Essayez de nettoyer le dossier / bin (manuellement). Il est possible que l'ancien fichier de construction persiste quelque part, vous empêchant de construire ...

Jetez aussi un coup d'œil à vos références - peut-être que vous dupliquez la définition de quelque chose que vous avez référencé?

Ceci est un tir sauvage - mais peut-être que vous avez ce fichier .dll installé dans GAC?


  • Fermez toutes les instances Visual Studio en cours d'exécution.
  • Arrêtez IIS (en cours d'exécution, sinon arrêtez cette chose "devserver")
  • Effacer le dossier du fichier ASP.NET Temp (complètement)
  • Effacer le dossier BIN
  • Démarrer IIS (si en cours d'exécution)
  • Démarrer VS
  • Reconstruire la solution

J'ai rencontré ce problème au moins deux fois.
La réponse de David Ebbo est certainement celle qui explique ce qui se passe.

Dans mon projet, j'ai créé un contrôle utilisateur que j'ai inséré dynamiquement dans un espace réservé.
Donc, le code derrière pour le contrôle serait quelque chose comme:

public partial class CustomerAppointmentList : System.Web.UI.UserControl
{
}

Notez que ce contrôle ne se trouve dans aucun espace de noms.

Dans le code derrière 'customer.aspx.cs', je charge dynamiquement cette commande userc:

{
    var contentControl = (CustomerAppointmentList)LoadControl("../controls/customerappointmentlist.ascx");
}

Parce que la classe 'CustomerAppointmentList' n'existe pas dans la page aspx, je dois le référencer dans mon custmer.aspx:

<%@ Reference Control="../controls/customerappointmentlist.ascx" %>

Lorsque le compilateur asp.net doit compiler customer.aspx, il apparaîtra dans la classe 'CustomerAppointmentList' et ajoutera le type à la bibliothèque de ce dossier.
Quelques secondes plus tard, le compilateur asp.net ajoutera la classe 'CustomerAppointmentList' à une autre bibliothèque pour le dossier 'controls'.

Après avoir ajouté une interface 'ICustomerAppointmentList' dans une bibliothèque externe (projectname.web.dll) et modifié le code, le problème a disparu. Alors:

  1. Supprimez la partie 'Référence' dans votre fichier aspx.
  2. Créez une interface pour votre contrôle utilisateur.
  3. Assurez-vous que la classe 'CustomerAppointmentList' hérite du contrôle utilisateur.
  4. Lorsque vous utilisez LoadControl, lancez vers l'interface que vous venez de créer.

Mon nouveau code (ascx.cs):

    public partial class CustomerAppointmentList : System.Web.UI.UserControl, ICustomerAppointmentList
{
}

(aspx.cs)

{
var contentControl = (ICustomerAppointmentList)LoadControl("../controls/customerappointmentlist.ascx");  
}

Pour moi, cela s'est produit lorsque mon emplacement PrecompiledWeb / Publish a été défini sur le répertoire en cours où se trouvait également le dossier racine du site.

Mon site Web voyait alors le dossier de publication dans le cadre du projet lors de la compilation / construction et ensuite de trouver des doublons de cette manière.

Ne mettez pas la version publiée de votre site dans les dossiers de code de votre site.





exception-handling