Pourquoi est-ce que j'obtiens une icône d'avertissement lorsque j'ajoute une référence à un projet de plugin MEF?

321

Je souhaite tester la classe principale d'un plugin en référençant directement le projet de plugin et en instanciant la classe de plugin. Lorsque je crée un projet d'application console de test et que j'ajoute une référence de projet au projet de plug-in, j'obtiens une icône d'avertissement (triangle jaune avec point d'exclamation) à côté de la référence dans la liste des références.

Lorsque j'ajoute à la place une référence à la DLL, la sortie de génération d'assembly du plugin, je ne reçois aucun avertissement. Qu'est-ce que cet avertissement pourrait essayer de me dire?

ProfK
la source
8
La plupart du temps, les triangles d'avertissement auront des info-bulles ou (à défaut) une entrée dans la fenêtre des erreurs. À une supposition, les deux projets ont des dépendances incompatibles.
Damien_The_Unbeliever
2
Des avertissements dans la console lorsque vous essayez de construire?
Jite
231
J'ai vu cela avec les projets ciblant différentes versions de
framwork
4
@OP pourriez-vous sélectionner la bonne réponse de kad81
Andy
5
Cela me fait toujours . Ajout d'un nouveau projet à une solution .NET 4 et la valeur par défaut est 4.5.
Robin French

Réponses:

674

Comme mentionné dans les commentaires de la question, des versions différentes de .NET Framework entre les projets peuvent provoquer cela. Vérifiez les propriétés de votre nouveau projet pour vous assurer qu'aucune version par défaut différente n'est utilisée.

kad81
la source
13
Ce que je dois aussi savoir, c'est pourquoi Visual Studio a accepté d'ajouter ces références alors?
Anders Lindén
16
J'utilise VS 2015 et le problème est toujours là. J'ai perdu une demi-heure avant de venir ici.
Alisson
14
pas même de texte flottant ou d'erreurs de construction expliquant le problème
matao
6
Peut confirmer que c'était la racine du problème. Peut également confirmer que Visual Studio 2017 avec la mise à jour 15.3 n'a toujours pas résolu le problème de ne pas afficher réellement un message significatif. Très ennuyant.
Greg R Taylor
4
@matao a accepté! C'est ennuyeux, je n'ai pas pu obtenir de détails sur l'erreur ...
nterry
74

Rencontré le même problème avec une application Web ASP.Net et deux projets de classe de bibliothèque qui devaient être référencés dans l'application Web. Je n'avais aucune information fournie sur la raison de l'échec de la construction et les références n'étaient pas valides.

La solution était de s'assurer que tous les projets avaient le même cadre cible:

Dans Visual Studio 2015 - Projet Clic droit> Propriétés> Application> Framework cible

Enregistrer, nettoyer et reconstruire la solution. Les références du projet ne devraient plus apparaître comme des avertissements jaunes et la solution se compilera.

Mon application Web ciblait .Net 4.5 tandis que les deux autres projets de classe de bibliothèque dépendants ciblaient .Net v4.5.2

kbarry
la source
44

Pour les deux (ou tous) les projets que vous souhaitez utiliser ensemble:

Faites un clic droit sur le projet> Propriétés> Application> Framework .NET cible

Assurez-vous que vos projets (ou tous) utilisent la même version du framework .NET.

user3578181
la source
Parfait, a fonctionné pour moi! J'ai eu un projet MVC avec .NET Framework 4.5.2. Et mes bibliothèques de classes qui y font référence étaient .NET Framework 4.7.
Mike Upjohn
On pourrait penser que de nouveaux projets ajoutés à une solution existante seraient assez intelligents pour savoir quelle version, mais malheureusement pas le cas.
Ron
39
  1. Assurez-vous que toutes les versions sont identiques pour chaque projet, cliquez sur chaque projet et voyez la version ici Projet> Propriétés> Application> Framework .NET cible

  2. une. Allez dans Outils> Nuget Package Manager> Package Manager Console Type Update-Package -Reinstall (si cela ne fonctionne pas, passez à 2.b )

    b. C'EST CRITIQUE MAIS LA PLUS GRANDE POSSIBILITÉ QUI FONCTIONNERA . Supprimez <Cible> Peut-être avec plusieurs lignes </ Cible> qui se trouvent généralement dans la partie inférieure de .csproj.

  3. Enregistrez, chargez et créez la solution.

Aljohn Yamaro
la source
1
Merci pour cela, un joli message d'erreur dans Visual Studio sur les versions .Net ne s'égarerait pas ici!
colmde
1
@colmde de façon intéressante si vous nettoyez la solution, la fenêtre de sortie affiche le message suivant: 'Le package a été restauré à l'aide de .NetFramework XXX au lieu du framework cible .NetFramework XXX. Le package peut ne pas être entièrement compatible avec votre projet '
elszeus
1
La partie 2.b qui n'était pas mentionnée dans les autres réponses a été critique pour moi! 2.b Supprimez <Cible> Peut-être avec plusieurs lignes </ Cible> qui se trouvent généralement dans la partie inférieure de .csproj.
shelbypereira
1
La partie 2.b est complètement folle mais ça marche! merci
Elo
1
Merci 2.b a fait l'affaire aussi pour moi. N'aurais JAMAIS compris cela moi-même.
Henrik Clausen
23

Réinstallez tous les packages dans tous les projets de la solution actuelle:

Update-Package -Reinstall
Nitin Badole
la source
2
Bien que cette suggestion n'ait pas directement résolu mon problème, elle m'a orienté dans la bonne direction pour mon scénario. Pour ceux que cela peut aider, j'ai dû changer ma source de package NuGet en v3 pour Update-Package pour trouver la bonne version à télécharger: docs.nuget.org/consume/package-manager-dialog#package-sources
John Lee
1
Il a supprimé tous les paquets, les a installés et les triangles jaunes sont revenus.
Anders Lindén
8

Assurez-vous que les projets ciblent la même version du framework . La plupart du temps, la raison en est que le projet en cours (où vous ajoutez la référence d'un autre projet) pointe vers une version de framework .net différente des autres .

user274294
la source
5

Vérifiez NETFramework de la DLL référencée et du projet où vous ajoutez la DLL. Ex: DLL ==> supportedRuntime version = "v4.0" Project ==> supportedRuntime version = "v3.0"

Vous obtiendrez une icône d'avertissement. Solution: assurez la cohérence de la version de la dll.

Sumit khare
la source
5

Pour moi, j'ai rencontré ce problème lors du référencement d'une bibliothèque de classes .NET Standard 2.0 dans une application console .NET Framework 4.7.1. Oui, les frameworks sont différents, mais ils sont compatibles (.NET Standard est censé fonctionner avec .NET Core et .NET Framework.) J'ai essayé de nettoyer, reconstruire, supprimer et lire la référence du projet, etc ... sans succès . Enfin, la fermeture de Visual Studio et la réouverture ont résolu le problème.

Justin
la source
4

Cela fait longtemps que cette question n'a pas été posée, mais si quelqu'un est toujours intéressé - j'ai récemment rencontré des icônes similaires. Je compilais un projet C # .net à l'aide de VS 2008. J'ai trouvé que VS ne pouvait pas localiser les assemblys pour ces références. Lorsque j'ai double-cliqué, VS a actualisé les références et supprimé les icônes de certaines de ces [EDIT: qu'il pourrait MAINTENANT localiser]. Pour les références restantes, j'ai dû compiler les assemblages respectifs.

HappyTown
la source
4

Ajoutant mes 2 cents à la réponse @ kad81,

Accédez à Visual Studio -> BUILD -> Configuration Manager

Dans le menu déroulant "Active Solution Platform" en haut à droite (le mien est VS 2012), s'il s'agit de "Mixed Platforms", remplacez-le par la plate-forme appropriée en fonction de vos assemblages tiers de référence.

Ensuite, dans chacun des projets de la liste, assurez-vous de sélectionner la même plate-forme pour tout le projet. (si x86 n'existe pas, sélectionnez "", vous pouvez alors sélectionner "x86".)

Reconstruisez d'abord les projets de bibliothèque, puis faites référence aux projets. J'espère que cela t'aides.

JenonD
la source
4

Essayez de fermer et d'ouvrir VS.

Cela semble idiot, mais après 1 heure à suivre ce qui précède et à trouver que tout allait bien. J'ai redémarré VS 2017 et les problèmes ont disparu.

Alex Stephens
la source
1
A travaillé pour moi. Stupide ou pas parfois, Visual Studio est confus et son cache est vissé. Merci de l'avoir suggéré - détesté de le faire parce que je me sentais stupide de penser que cela fonctionnerait, mais qu'est-ce que le "diable" - après une heure d'autres choses, je pourrais aussi bien et tada cela a fonctionné
Blake
2

Dans le noyau Asp.net, il affiche parfois une alerte si vous modifiez l'espace ou le nom du projet. Pour supprimer ce type d'alertes, il vous suffit de décharger le projet et de le charger à nouveau. Si le problème persiste, cela signifie que vous ne pouvez pas trouver la référence de votre assemblage.

Tomcat0x4d2e47
la source
1

J'avais ces icônes pour une raison différente. Nous avons une grande solution pour tous nos projets (près de 100). J'ai fait une sous-sélection des projets qui m'intéressaient et j'ai fait une nouvelle solution. Cependant, les références où le projet fait référence au lieu de références aux DLL compilées ....

Après quelques recherches, j'ai trouvé ce lien sur GitHub qui explique que c'est un nouveau comportement dans VS2015.

Sur la page GitHub, ils expliquent une solution de contournement pour convertir les références de projet en références binaires.

Martijn
la source
1

Pour corriger certaines choses qui ne fonctionnent pas, il est judicieux de les supprimer parfois certaines bibliothèques, comment cela ne semblerait-il pas bizarre?

Quoi qu'il en soit, je pense que le problème est trop large et pourrait être causé par différents facteurs , alors je veux partager ma situation / solution.

J'ai eu un projet (apporté par le client) avec les bibliothèques Xamarin Forms et Telerik. La chose était en général liée aux composants, dont les bibliothèques ne sont pas incluses dans le dossier packages, ni disponibles via Nuget (celles payantes).

L'ensemble des références du projet étaient "jaunes", cela avait l'air horriblement et effrayant.

La solution consistait simplement à supprimer ces références Telerik (y compris quelques contrôles dans le code qui utilisaient cela). Juste après cela, toutes les références ont comme par magie leur couleur grise normale commune et les erreurs ont (pour la plupart) disparu.

"Surtout" - car les messages d'erreur "tout rouge" concernant "l'élément n'est défini nulle part" se produisent parfois encore. C'est bizarre et apporte des inconvénients, mais je peux toujours compiler et exécuter le ou les projets: il suffit de nettoyer la solution, de redémarrer Visual Studio, de prier un peu, de nettoyer à nouveau, de supprimer les dossiers obj / bin, de redémarrer à nouveau, et fonctionne bien.

L'essentiel est de supprimer les références aux bibliothèques non disponibles , car les messages d'erreur disent absolument autre chose. (Par exemple, quelque chose comme "Xamarin.Build.Download.XamarinDownloadArchives introuvable ou ne trouve pas quelque chose", etc., mais cela signifie peut-être que vous n'avez pas de références disponibles.

Ensuite, supprimez le dossier des packages, rechargez / rouvrez le projet / la solution, allez dans "Gérer les packages Nuget" et cliquez sur le bouton "Restaurer".

Agat
la source
1

En utilisant Visual Studio 2019 avec tous les projets ciblant .Net Core 3.1, la solution était de:

  1. Nettoyer / Construire / Reconstruire.
  2. Redémarrez Visual Studio 2019
Riaan van Zyl
la source
0

J'ai également rencontré le même problème mais mon cas était un peu différent de ceux ci-dessus. J'ai essayé d'ouvrir un projet créé sur un autre ordinateur. J'ai constaté que le chemin d'accès au dossier de package n'est pas mis à jour lorsque vous ajoutez une référence, donc le redémarrage de VS, la modification de la version .NET ou toute recommandation mentionnée ne résout pas le problème. J'ai ouvert le fichier csproj dans notepad ++ et corrigé tous les chemins d'accès relatifs au dossier packages. Ensuite; tous les avertissements ont disparu. J'espère que ça aide.

Ali
la source
0

dans VS 2017 Faites un nettoyage puis construisez

user1684037
la source
0

Merci à tous pour l'aide. Voici une ventilation de la façon dont j'ai résolu mon problème:

Faites un clic droit sur votre projet> Propriétés

Sous Application, modifiez le Framework cible. Dans mon cas, ImageSharp utilisait .Net 4.6.1. Vous pouvez le trouver dans votre packages.config.

Accédez aux références de votre projet. Vous remarquerez que SixLabors a un triangle jaune. Vous devez mettre à jour le package NuGet.

Cliquez avec le bouton droit sur Références> Gérer les packages NuGet.

Mettez à jour SixLabors.

Vous pouvez avoir de légères mises à jour de code (voir ci-dessous) mais cela a résolu mon problème.

Convertir ImageSharp.Image en ImageSharp.PixelFormats.Rgba32?

PhoenixWright
la source
0

Dans Visual Studio 2019, l'un de mes projets cible framework était .net core mais il faisait référence à un autre projet dont le framework cible était .net standard. J'ai changé tous les projets pour référencer la norme .net et les icônes ont disparu. Pour voir quel est votre projet, cliquez dessus avec le bouton droit de la souris, puis cliquez sur Propriétés et regardez Framework cible. Vous pouvez également cliquer normalement sur le projet lui-même et regarder la balise <TargetFramework> sous <PropertyGroup>

abovetempo
la source
0

Dans une solution multi-projets, si toutes les autres choses ont échoué ... Sur le projet de démarrage, vérifiez. Dépendances-> Assemblys et voyez si le projet référencé erroné est là. Retirez-le et reconstruisez.

Babatunde Ahmed
la source