web-dev-qa-db-fra.com

Échec des références d'assemblage aléatoires ("Il vous manque une directive d'utilisation ou une référence d'assemblage?")

Mon application utilise un mélange d'assemblages ciblés 3.5 et 4.0. Je travaille sur un nouveau service Windows ciblant la version 4.0 et le projet semble soudainement incapable de voir certains des autres assemblys de la solution. Cela signifie, lors de la construction, que toutes les références à ces certains autres assemblages génèrent l'erreur suivante:

Le type ou le nom de l'espace de nommage '[X]' n'existe pas dans l'espace de nommage '[Y]' (il manque une référence d'assembly?)

Si je supprime la référence du projet et l'ajoute à nouveau, les squigglies rouges disparaissent et Intellisense se déclenche à nouveau comme prévu. Tous les autres projets de la solution sont générés sans problème. Mais dès que j'essaie de construire ce nouveau projet, les erreurs reviennent.

L'une des références défaillantes concerne notre fichier Core.dll, qui cible 3.5. Nous avons récemment ajouté un CoreEx.dll ciblant 4.0, avec un partage d’espace de noms entre les assemblys. Le nouveau service peut voir CoreEx.dll mais pas Core.dll ... c.-à-d., Lorsque je commence à taper using Core.Utilities... Intellisense détecte le plus petit ensemble d’espaces de nommage de CoreEx.dll, mais n’affiche pas ceux qui apparaissent uniquement dans Core.dll. Je suis à peu près sûr que la solution a été construite avec succès après avoir ajouté ceci, mais c'est un changement récent notable.

Une autre référence défaillante concerne notre noyau Data.dll, qui contient un ensemble d'ensembles de données et d'autres éléments Entity Framework. Celui-ci a récemment migré vers la version 4.0. Encore une fois, je suis presque certain que la solution élaborée après la migration du projet a été mise en place, mais il convient de le mentionner.

La dernière référence défaillante est un assembly qui utilise l'espace de noms au niveau "supérieur" du service. Par exemple, le projet problématique est basé sur l'espace de noms ProductName.Component.ComponentService et ne peut pas voir le projet basé sur l'espace de noms ProductName.Component. Celui-ci a été récemment créé avec le projet problématique et vise également 4.0.

Comme vous pouvez le constater, il ne semble pas exister de rime ni de raison pour lesquelles les références d'assemblage échouent ... et le projet problématique peut référencer avec succès certains des autres assemblys de la solution. J'ai essayé de nettoyer, de reconstruire, de redémarrer Visual Studio ... rien ne l'a résolu de façon permanente. Qu'est-ce qui peut causer cela?

31
Calvin Fisher

Vérifiez la plate-forme cible du nouveau projet et assurez-vous qu'elle ne cible pas .NET 4 Client Profile. Si c'est le cas, changez-le en .NET 4 normal

60
Dimitri

J'ajoutais des projets à une solution utilisant .net 4.5. Les projets que j'avais ajoutés étaient par défaut à 4.5.1. Cela rendait les bibliothèques incompatibles avec les nouveaux projets. Je suis allé dans les propriétés de mes nouveaux projets et les ai fait cibler 4.5 au lieu du 4.5.1 par défaut. Après cela, ma solution a pu être construite.

2
user3770181

Les dépendances sont-elles correctement définies dans la solution? J'ai déjà vu plus d'une occasion où le projet A dépendait du projet B, mais comme la dépendance entre les deux n'était pas définie, la construction échouait sporadiquement.

La cause sous-jacente dans ce cas est que l'ordre de construction n'est pas déterministe et que le succès/l'échec dépend d'éléments tels que les projets construits (en fonction de ce qui a changé) et ceux construits en premier (quand plusieurs sont construits).

1
DocMax

Ce problème m’est arrivé une fois que je l’ai résolu en supprimant toutes les instructions en utilisant et en les écrivant à nouveau manuellement. 

0
Little Programmer

Cela a fonctionné pour moi lorsque j'ai modifié le cadre cible à 4.0..Mais ce n'était pas la solution que nous recherchions..Nous voulions utiliser VS 2010 Premium pour notre projet, mais l'intention n'était PAS d'utiliser .net 4.0 ... La classe principale Le projet de bibliothèque (.net 2.0) faisait référence à la dll "system.web.abstractions.dll" ... J'ai ajouté la référence à cette dll dans d'autres projets (.net 2.0) qui fait référence à la bibliothèque de classes principale ... la solution compilée sans aucun problème ... cela pourrait donc être le cas avec votre solution Visual Studio ...

Mais tout fonctionne bien si nous utilisons VS 2008 professional .. nous n’avons besoin de aucune solution de contournement et tout fonctionne comme par magie ...

0

Veuillez également noter que cela peut arriver si vous modifiez l'espace de noms mais que vous n'avez pas modifié le nom de l'assembly dans les propriétés du projet.

0
Louhike

J'ai eu un problème similaire, une référence d'assemblage a échoué («Il vous manque une directive d'utilisation ou une référence d'assemblage?») Et VS intellisense m'a donné la possibilité d'ajouter l'utilisation mais la solution comportait l'icône jaune et la construction. échouait. 

J'ai résolu ce problème en examinant la propriété de projet Target Framework et en modifiant la version .net en version de solution de référence, ce qui a résolu tous les problèmes.

Remarque: les versions .net doivent être compatibles entre les projets.

0
DJon