Pourquoi ne puis-je pas référencer ma bibliothèque de classe?

86

J'ai une solution qui contient un site Web et une bibliothèque de classes dans Visual Studio 2008.

J'ai alors un autre projet de site Web en dehors de la solution qui a besoin de référencer la bibliothèque de classes. Je clique avec le bouton droit sur le dossier Bin ou le projet et sélectionnez Ajouter une référence, puis sélectionnez mon projet de bibliothèque de classes, il ajoute la quinzaine de DLL dont la bibliothèque de classes a besoin au dossier bin des sites Web, mais aucun des fichiers .cs ne reconnaît les instructions using.

using MyLibrary.MyFolder;

Il dit qu'il ne peut pas le résoudre, et ReSharper dit simplement qu'il peut être supprimé en toute sécurité car il n'est pas utilisé.

ReSharper peut reconnaître qu'il a besoin de la référence et suggère qu'il «référence MyLibrary et utilise MyFolder». Je ne sais pas pourquoi il suggère d'ajouter une référence que j'ai déjà. Lorsque j'accepte la suggestion, j'obtiens l'erreur

"Impossible de référencer le module. Probablement, la référence produira des dépendances circulaires entre les projets."

J'ai essayé d'accéder aux pages de propriétés des sites Web et de supprimer toutes les références et de les ajouter à nouveau, mais cela donne les mêmes erreurs. Des idées pourquoi cela ne fonctionne pas?

Brandon
la source
Vérifiez la version du framework .net dans la bibliothèque de classes et le projet dans lequel vous faites référence
lequel

Réponses:

164

Vérifiez également que les projets de la nouvelle solution s'exécutent sur une infrastructure compatible avec le projet que vous essayez d'inclure. J'essayais d'inclure une référence à un projet 4.0 dans un projet 3.5.

CindyH
la source
3
Gloire! Je construisais ma solution en 4.5 et je la liais à une 4.0. En raison de notre exigence actuelle de 4.0, j'ai rétrogradé la nouvelle solution à 4.0 et maintenant mon autre projet n'a plus de problèmes à construire contre elle. +1 pour m'aider à rester sain d'esprit!
David Peterson
1
J'avais surmonté tant d'obstacles précédents avec ce projet, j'étais sur le point de jeter l'éponge quand j'ai eu cette erreur. Vous l'avez sauvé, merci!
Tony D
1
Je ne m'attendais pas à ce que le problème soit résolu! Cool enuf
Irfaan
1
Ensuite, Microsoft devrait dire ceci et inclure une option pour les mettre tous dans la même version.
PRMan
1
J'ai sauvé ma journée! VisualStudio ne lèverait même pas d'alerte me rappelant cela :(
Reuel Ribeiro
86

J'ai trouvé comment résoudre ce problème (du moins pour moi). Pourquoi cela a fonctionné, je ne suis pas sûr, mais cela a fonctionné. (J'ai juste essayé contre un deuxième site Web qui avait le même problème et la solution suivante fonctionnait également pour cela).

J'ai essayé le nettoyage normal des projets et la reconstruction, en arrêtant toutes mes instances de Visual Studio et en les redémarrant, j'ai même essayé de redémarrer mon ordinateur.

Ce qui fonctionnait réellement, c'était d'ouvrir le projet dans Visual Studio, de fermer tous les onglets ouverts, puis de le fermer.

Avant, j'avais laissé les onglets ouverts parce que je ne pensais pas que cela importait (et je ne ferme presque jamais les onglets que j'utilise).

Brandon
la source
Le simple redémarrage de VS a fonctionné pour moi. La cause de ce problème était une refactorisation de renommée de projet / espace de noms déclenchant un bogue dans R #.
mbx
Cela a fonctionné pour moi aussi. J'ai fermé tous les onglets comme vous l'avez dit, puis redémarré mon IDE et voilà, je peux référencer ma bibliothèque de classe maintenant. Merci.
yuva
31

Une possibilité est que la version .NET Framework cible de la bibliothèque de classes soit supérieure à celle du projet.

user4847434
la source
8

J'ai eu un problème similaire, toutes mes références seront-elles gâchées par Resharper - La solution qui a fonctionné pour moi est de vider le cache de Resharper, puis de redémarrer VS

tools-> options-> resharper-> options-> general-> cliquez sur le bouton clear caches et redémarrez VS

Rocheux
la source
4

J'ai eu des problèmes similaires où VS construisait parfois et parfois pas. Après quelques recherches et tentatives, j'ai découvert que j'avais une référence ambiguë à une classe avec le même nom dans différentes bibliothèques ('FileManager'). Le projet qui ne serait pas construit était mes tests unitaires qui référencent tous les modules de ma solution. L'application de la référence à un module spécifique a réglé les choses pour moi.

Mon point est le suivant: plutôt que de blâmer ReSharper ou VS, cela peut être une bonne idée de vérifier s'il n'y a vraiment pas une sorte de référence circulaire. Plus que souvent, les classes portant les mêmes noms dans différents modules peuvent prêter à confusion et sont souvent le symptôme d'une mauvaise conception (comme dans mon cas).

Fedor Steeman
la source
+1 dans mon cas, deux projets avec des espaces de noms différents ont été compilés en un .exe avec le même nom (nom de l'assembly dans l'onglet Application dans Visual Studio) - en raison d'un projet de migration, cela a (un peu) sens; Msbuild de la ligne de commande nous a donné un indice pas si utile qui nous a laissé se demander pendant un certain temps: The type or namespace name 'A' does not exist in the namespace 'B'. Notez qu'aucun avertissement ne
s'affiche
3

Cela ressemble à un problème similaire avec ReSharper:

http://www.jetbrains.net/devnet/thread/275827

Selon un utilisateur du thread, forcer une compilation résout le problème (CTRL + Maj + B) après la première compilation.

Sonne comme un problème avec ReSharper spécifiquement dans leur cas .. Avez-vous essayé de construire indépendamment des avertissements et des fausses erreurs possibles?

KP.
la source
Je suis tombé dessus plus tôt. Et je ne sais pas si sa construction a "résolu" le problème. Il compile, mais il montre toujours les classes, utilisant des instructions, des classes, etc. comme n'étant pas reconnues. Cependant, si je casse volontairement un appel de méthode, Visual Studio semble reconnaître l'erreur, même s'il ne me montre pas la liste des paramètres. Je suppose que c'est la faute de ReSharpers.
Brandon
3

Comme ils sont tous les deux dans la même solution, au lieu d'ajouter une référence à la DLL, ajoutez une référence au projet de bibliothèque de classes lui-même (la boîte de dialogue Ajouter une référence aura un onglet pour cela).

Ahh, c'est une solution différente. J'ai raté ça. Que diriez-vous d'essayer au lieu d'ajouter une référence au projet en ajoutant une référence à la DLL compilée de votre bibliothèque de classes. La boîte de dialogue Ajouter une référence a un onglet Parcourir qui fait cela.

Vilx-
la source
1
Cela a fonctionné pour moi, d'autres solutions ont suggéré d'ajouter une référence mais pour une raison quelconque, je ne l'ai pas trouvée avant d'avoir cliqué avec le bouton droit sur le projet principal dans l'explorateur de solutions.
Ralpharama
3

Après avoir confirmé que la même version d'asp.net était utilisée. J'ai supprimé le projet. nettoyé la solution et rajouté le projet. C'est ce qui a fonctionné pour moi.

David
la source
J'ai eu le même problème et cela a semblé aider. Assez étrange.
inexcitus
2

Si vous référencez des assemblys pour des projets qui se trouvent dans la même solution, ajoutez une référence de projet (à l'aide de l'onglet "Projets") plutôt que de rechercher la dll dans le dossier \ bin \ Debug (ou \ bin \ Release) (à l'aide de la Onglet "Parcourir"). Voir la capture d'écran ci-dessous. Recherchez uniquement le fichier assembly / dll s'il est considéré comme un assembly externe.

entrez la description de l'image ici

MacGyver
la source
2

J'ai supprimé * .csproj.user (fichier resharper) de mon projet, puis fermez tous les onglets et rouvrez-le. Après cela, j'ai pu compiler mon projet et il n'y avait aucun avertissement de réaffectation.

Alex
la source
J'ai fait cela et j'ai obtenu mon intelli-sense montrant à nouveau les informations d'assemblage, mais dès que j'ai essayé de recompiler, mes informations intelli-sense pour cet assemblage ont été effacées et la construction a échoué. C'est une étrange erreur!
David Peterson
J'ai également dû recréer mon projet à partir de zéro ... je pense avoir fait quelques désinstallations / installations dans NuGet sur un projet relativement récent.
Adam Nofsinger
La suppression et la recréation de références ont fonctionné pour moi, la suppression complète du fichier de projet pourrait être excessive.
danjuggler
2

J'ai eu ce problème. Il m'a fallu des siècles pour comprendre. J'avais des gens sur mon épaule pour m'aider. Nous avons reconstruit, nettoyé et redémarré Visual Studio et cela ne l'a pas résolu. Nous avons supprimé et rajouté les références ...

Tout cela en vain .... Jusqu'à!

La solution à mon problème était que ma déclaration de classe était mal orthographiée.

Avant de commencer à me juger sévèrement, permettez-moi d'expliquer pourquoi ce n'était pas stupide, et aussi pourquoi cette erreur pourrait être commise même par les programmeurs les plus intelligents.

Comme l'erreur était très tôt dans le nom, elle n'apparaissait pas dans la liste des classes intellisense lorsque j'ai commencé à taper.

par exemple

Nom du cours: Message.cs

Déclaration:

public class Massage
{
    //code here

}

En un coup d'œil et dans une petite police, Massage ressemble à Message.

Taper M listait trop de classes, donc j'ai tapé e, qui n'apparaissait pas dans la version mal typée, ce qui donnait l'impression que la classe n'était pas reprise par le compilateur.

WonderWorker
la source
Donc, essentiellement, vous avez eu une faute de frappe. Ce n'est pas vraiment utile aux autres.
TylerH
0

J'ai eu un problème similaire dans VS 2010, lors de la création d'un projet de test pour une application MVC 2. Les symptômes étaient identiques.

Le message de ReSharper était quelque peu trompeur. Pendant un moment, j'ai complètement ignoré ReSharper et l'ai fait "à la manière VS manuelle":

  1. J'ai nettoyé la solution.
  2. J'ai ajouté manuellement la référence au projet MVC.
  3. J'ai ajouté manuellement les directives d'utilisation.
  4. ctrl-shift-b

A ce stade, j'ai eu une erreur de compilation: j'aurais dû référencer l' System.Web.Mvcassemblage dans mon projet de test (soupir). L'ajout de cette référence entraîne la compilation du projet. Les problèmes de ReSharper persistent, mais le lanceur de test ReSharper fonctionne.

Lorsque je redémarre VS, les erreurs ReSharper ont également disparu. Je ne sais pas si le redémarrage est nécessaire - il suffit de fermer le fichier .cs.

A partir de maintenant, quand je vois le message ReSharper

Impossible de référencer le module. Probablement, la référence produira des dépendances circulaires entre les projets.

Je vais lire

Impossible de référencer le module. Probablement, la référence produira des dépendances circulaires entre les projets, ou il vous manque des références aux dépendances des dépendances de la référence.

Marijn
la source
0

Une autre solution possible qui a fonctionné pour moi:

Si vous avez l'assembly A, qui fait référence à l'assembly B, qui font tous deux référence à un assembly X non-projet (externe), et que le code de l'assembly B ne reconnaîtra pas que vous avez référencé X, alors essayez les étapes suivantes dans l'ordre:

  • Supprimer la référence à X des DEUX A et B
  • Recréez la référence à X en B
  • Recréez la référence à X dans A

Apparemment, VS ne reconnaîtra pas une référence à un assembly externe dans un projet qui est une dépendance d'un autre projet qui fait déjà référence à l'externe. En configurant à nouveau les références à partir de zéro, vous surmontez ce problème. C'est juste très étrange.

KeithS
la source
Intéressant mais vrai sur VS2015. Merci!
Scott Nimrod
0

J'ai fait face à ce problème et je l'ai résolu en fermant Visual Studio, en rouvrant Visual Studio, en nettoyant et en reconstruisant la solution. Cela a fonctionné pour moi.

Muhammad Sohail
la source
0

Si vous utilisez TFS, l'exécution d'un Get latest (récursif) ne fonctionne pas toujours. Au lieu de cela, je force un get latest en cliquant sur Contrôle de source => Obtenir une version spécifique, puis en cliquant sur les deux cases. Cela a tendance à fonctionner.

entrez la description de l'image ici

Si cela ne fonctionne toujours pas, la suppression du fichier suo (qui se trouve généralement au même endroit que la solution) force visual studio à récupérer tous les fichiers de la source (et à reconstruire ensuite le fichier suo).

Si cela ne fonctionne pas, essayez de fermer tous vos fichiers ouverts et de fermer Visual studio. La prochaine fois que vous ouvrez Visual Studio, cela devrait être corrigé. Il y a un bogue de resharper qui est résolu de cette façon.

WonderWorker
la source
0

J'étais tombé sur un problème similaire récemment. Je travaille dans Visual Studio 2015 avec Resharper Ultimate 2016.1.2. J'essayais d'ajouter une nouvelle classe à ma base de code en essayant de référencer une classe d'un autre assembly mais Resharper lèverait une erreur pour ce package.

Avec l'aide d'un collègue, j'ai compris que la classe référencée existait dans l'espace de noms global et n'était pas accessible depuis la nouvelle classe car elle était masquée par une autre entité du même nom qui existait dans l'espace de noms actuel.

L'ajout d'un mot clé 'global ::' avant l'espace de noms requis m'a aidé à référencer la classe que je recherchais réellement. Vous trouverez plus de détails à ce sujet sur la page ci-dessous:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx

Lumena
la source
0

Si les deux projets sont contenus dans la même solution, il sera plus approprié si vous ajoutez la référence pour le projet dont vous avez besoin, pas sa DLL compilée.

entrez la description de l'image ici

Manuel Roldan
la source
-1

Malheureusement, la seule chose qui a fonctionné pour moi a été de supprimer complètement et de recréer le projet de bibliothèque de classes, après avoir temporairement copié les fichiers de classe ailleurs. Ce n'est qu'alors que le projet Web ASP.Net reconnaîtra les usinginstructions faisant référence au projet de bibliothèque de classes. C'était avec Visual Studio 2010, sans utiliser ReSharper.

snark
la source
-1

J'ai eu un problème similaire. Ce qui a fonctionné pour moi, c'est que j'avais ajouté une mauvaise bibliothèque de classes à partir de Visual Studio . J'ai ajouté en utilisant la fonction de recherche de Visual Studio.

Ce que je devais faire était Ajouter un nouveau projet> Visual C #> Bibliothèque de classes . Et cette bibliothèque de classes nouvellement ajoutée est la bonne et peut maintenant être ajoutée comme référence à n'importe quel projet.

Muhammad Rehan Qadri
la source
-4

Vous pouvez oublier d' ajouter une référence à la bibliothèque de classes que vous deviez importer.

Faites un clic droit sur la bibliothèque de classes dans laquelle vous souhaitez importer (qui contient plusieurs bibliothèques de classes importées), -> Ajouter-> Référence (Sélectionnez Projets-> Solution-> sélectionnez la bibliothèque de classes à partir de laquelle vous souhaitez importer-> OK)

Kyle
la source