web-dev-qa-db-fra.com

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

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

J'ai ensuite un autre projet de site Web en dehors de la solution qui doit référencer la bibliothèque de classe. Je clique avec le bouton droit de la souris sur le dossier Bin ou le projet, puis sélectionnez Ajouter une référence, puis mon projet de bibliothèque de classes. Il ajoute les 15 DLL environ nécessaires à la bibliothèque de classes dans le dossier bin des sites Web, mais aucun fichier .cs ne reconnaît les instructions using.

using MyLibrary.MyFolder;

Il dit qu'il ne peut pas résoudre le problème et ReSharper indique simplement qu'il peut être retiré en toute sécurité car il n'est pas utilisé.

ReSharper peut reconnaître qu'il a besoin de la référence et lui suggère de "référencer MyLibrary et utiliser MyFolder". Je ne sais pas pourquoi cela suggère d'ajouter une référence que j'ai déjà. Quand je vais avec la suggestion, je reçois l'erreur

"Échec de la référence au module. Probablement, la référence générera des dépendances circulaires entre les projets."

J'ai essayé de consulter les pages de propriétés des sites Web, de supprimer toutes les références et de les rajouter, mais les mêmes erreurs se produisent. Des idées pourquoi cela ne fonctionne pas?

86
Brandon

J'ai trouvé comment résoudre ce problème (pour moi au moins). Pourquoi ça a fonctionné, je ne suis pas sûr, mais ça a fonctionné. (Je viens d'essayer contre un deuxième site Web qui avait le même problème et la solution suivante a également fonctionné 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 a réellement fonctionné a été 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).

85
Brandon

Vérifiez également que les projets de la nouvelle solution fonctionnent avec un framework 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.

158
CindyH

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

31
user4847434

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

outils-> options-> resharper-> options-> général-> cliquez sur le bouton d'effacement des caches et redémarrez VS

8
Rocky

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

Mon argument est le suivant: plutôt que de blâmer ReSharper ou VS, il peut être judicieux de vérifier s’il n’ya pas vraiment de référence circulaire. Plus que souvent, les classes portant les mêmes noms dans différents modules peuvent être source de confusion et sont souvent le symptôme d’une mauvaise conception (comme dans mon cas).

4
Fedor Steeman

Cela ressemble à un problème similaire avec ReSharper:

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

Selon un utilisateur du thread, le fait de forcer une génération corrige le problème (CTRL + Maj + B) après la première génération.

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

3
KP.

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 plus d'avertissements de resharper.

2
Alex

J'ai eu ce problème. Il m'a fallu des siècles pour comprendre. J'ai eu des gens sur mon épaule pour aider. Nous avons reconstruit, nettoyé et redémarré Visual studio et cela n'a pas résolu le problème. Nous avons supprimé et ré-ajouté 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'est pas stupide et pourquoi cette erreur pourrait être commise même par le plus intelligent des programmeurs.

Comme l’erreur a été commise au début du nom, elle n’apparaissait pas dans la liste de la classe 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 est identique à Message.

Taper M a répertorié trop de classes, alors 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.

2
Knickerless-Noggins

Si vous référencez des assemblys pour des projets de 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 commande "Parcourir" onglet). Voir la capture d'écran ci-dessous. Recherchez uniquement le fichier Assembly/dll s’il est considéré comme un assembly externe.

enter image description here

2
MacGyver

Comme ils font tous les deux partie de 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 comportera 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 compilation DLL de votre bibliothèque de classes). La boîte de dialogue Ajouter une référence comporte un onglet Parcourir.

2
Vilx-

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

1
David

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

enter image description here

0
Manuel Roldan

Je suis 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 tout en essayant de référencer une classe à partir d'un autre assembly, mais Resharper émettrait une erreur pour ce package.

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

L'ajout d'un mot clé 'global ::' avant l'espace de nom requis m'a aidé à faire référence à la classe que je cherchais réellement. Plus de détails à ce sujet peuvent être trouvés sur la page ci-dessous:

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

0
lumena

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.

0
Muhammad Sohail

Une autre solution possible qui a juste fonctionné pour moi:

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

  • Supprimez la référence à X des DEUX A et B
  • Recréer la référence à X en B
  • Recréer la référence à X en A

Apparemment, les systèmes virtuels ne reconnaîtront pas une référence à une assemblée externe dans un projet qui est une dépendance d'un autre projet qui fait déjà référence à l'externe. En redéfinissant les références à partir de la base, vous surmontez ce problème. C'est juste très étrange.

0
KeithS

Si vous utilisez TFS, effectuer une opération Obtenir dernière (récursif) ne fonctionne pas toujours. Au lieu de cela, je force un dernier en cliquant sur Contrôle de la source => Obtenir la version spécifique, puis en cliquant sur les deux cases. Cela a tendance à fonctionner.

enter image description here

Si cela ne fonctionne toujours pas, la suppression du fichier suo (qui se trouve généralement au même endroit que la solution) oblige Visual Studio à obtenir tous les fichiers de la source (et ensuite à reconstruire le fichier suo).

Si cela ne fonctionne pas, essayez de fermer tous vos fichiers ouverts et de fermer Visual Studio. À la prochaine ouverture de Visual Studio, il devrait être corrigé. Il y a un bogue de resharper qui est résolu de cette façon.

0
Knickerless-Noggins

J'ai rencontré 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 de la "manière manuelle VS":

  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 using.
  4. ctrl-shift-b

A ce stade, j'ai eu une erreur de compilation: j'aurais dû faire référence au System.Web.Mvc Assemblée dans mon projet d’essai (soupir). L'ajout de cette référence entraîne la compilation du projet. Les problèmes ReSharper demeurent, mais le programme d’essai ReSharper fonctionne.

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

A partir de maintenant, quand je verrai le message ReSharper

Échec de la référence au module. Probablement, la référence produira des dépendances circulaires entre les projets.

Je vais lire

Échec de la référence au module. Probablement, la référence générera des dépendances circulaires entre les projets ou vous manquerez certaines références aux dépendances des dépendances de la référence.

0
Marijn