Erreur étrange-CS0012: le type x est défini dans un assemblage qui n'est pas référencé

le type " x " est défini dans un ensemble qui n'est pas référencé. Vous devez ajouter une référence à l'assemblage 'abc123'.

j'ai une application web .NET 2.0 qui fait référence à mon assemblée 'abc123'. L'Assemblée existe dans le GAC et j'ai vérifié qu'il s'agit de la bonne(même) version. Le reste de la demande n'a aucun problème, sauf un .aspx page. La page en question a un répéteur qui affiche un contrôle utilisateur comme l'un de ses "champs". Lors de la fixation d'une liste de type y au répéteur je passe le contrôle de l'utilisateur une liste de type x (une propriété de y) comme montré ici:

<uc1:usercontrol id="ucusercontrol " runat="server" myPublicUserControlProperty='<%#Eval("CollectionOfX") %>'/>

sur le jeu de propriétés du contrôle de l'utilisateur, je lie la liste du type x à un gridview dans le contrôle de l'utilisateur.

une chose étrange à noter est que ce rapport fonctionne très bien sur mon PC de développement mais pas sur aucun serveur une fois que je me déploie. Mon pc est Windows XP, IIS6, VS2005. Les serveurs sont Windows Server 2003, IIS6.

j'espère que j'ai expliqué que assez bien. Merci à l'avance pour tout renseignement que vous pouvez fournir.

29
demandé sur Dave Clemmer 2008-11-12 19:09:40

7 réponses

Je suis le collègue de Mike, et nous avons trouvé une solution.

le type X est défini dans son assemblage, c'est-à-dire uniquement dans le GAC. Même si son ASP.NET l'application web avait une référence, elle ne se chargeait pas du GAC que pour ce UserControl. Le reste de la demande a fonctionné comme prévu. Nous avons confirmé l'échec du chargement en plaçant une copie de l'assemblage dans le répertoire bin, et tout a fonctionné. Nous avons retiré l'assemblée, et le problème est revenu.

Notre solution était d'ajouter manuellement une entrée pour le web.config dans la section assemblages à point ASP.NET au GAC.

il semble que chaque fois que vous faites référence à un type dans la page (pas le code-derrière), vous avez besoin des informations d'assemblage définies dans le web.fichier de configuration ou dans une directive de page.

<assemblies>
        <add assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/>   
</assemblies>
28
répondu Aaron Daniels 2008-11-12 19:32:54

il y a aussi un bug qui peut se manifester avec des symptômes similaires, décrit ici .

la solution est de supprimer tout dans le C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\ directory, et il ne semble se manifester qu'en mode debug.

4
répondu Tom Lianza 2012-05-02 12:15:30

pour résoudre ces types de problèmes, le Fusion Log Viewer a toujours été d'une grande aide.

3
répondu Maxam 2008-11-12 16:27:16

j'ai trouvé que si type x est en fait une classe dans votre App_Code , salir et re-sauver oblige souvent l'application web à recompiler et résout le problème.

1
répondu Charbarred 2012-10-30 00:58:02

plus souvent qu'autrement, c'est à cause des assemblages mis en cache. Une façon de résoudre ce problème est de faire la "référence forte" dans le fichier proj ou config. Consultez ce blog post

0
répondu Lav G 2012-09-07 13:47:50

j'ai eu la même erreur, mais j'ai eu un public constructeur dans ma classe qui a utilisé comme paramètre, un objet d'un autre projet.

j'ai résolu le problème en rendant ce constructeur interne.

0
répondu Dan 2012-11-29 12:58:52

pour moi c'était un problème de contrôle de version.

dans Visual studio, ouvrez "References" dans votre explorateur de solutions, et faites défiler à travers.

si quelque chose a un triangle d'avertissement jaune sur lui, rappelez-vous du nom, retirez-le, et ajoutez-le à nouveau (ou demandez à ReSharper de le faire pour vous).

m'est arrivé plusieurs fois après avoir tiré un projet quand un collègue a ajouté un nouveau paquet et des références.

0
répondu Max Izrin 2018-05-07 00:14:12