Une solution .NET 3.5 s'est retrouvée avec cet avertissement lors de la compilation avec msbuild.
Parfois, NDepend peut aider, mais dans ce cas, il n'a pas donné plus de détails. Comme Bob, j'ai dû recourir à l'ouverture de chaque assembly dans ILDASM jusqu'à ce que je trouve celle qui faisait référence à une ancienne version de l'assembly dépendant.
J'ai essayé d'utiliser MSBUILD à partir de VS 2010 Beta 2 (comme l'article Connect indique que cela a été corrigé dans la prochaine version du CLR) mais cela n'a pas fourni plus de détails non plus (peut-être corrigé après la Bêta 2)
Existe-t-il une meilleure approche (plus automatisée)?
Réponses:
Remplacez la «verbosité de sortie de la construction du projet MSBuild» par «détaillée» ou supérieure. Pour le faire, suivez ces étapes:
Dans la page des outils / options qui apparaît, définissez le niveau de verbosité de la sortie de génération du projet MSBuild sur le paramètre approprié en fonction de votre version:
Consultez les messages MSBuild. le
ResolveAssemblyReferences
tâche, qui est la tâche d'où provient MSB3247, devrait vous aider à déboguer ce problème particulier.Mon cas spécifique était une référence incorrecte à SqlServerCe. Voir ci-dessous. J'ai eu deux projets référençant deux versions différentes de SqlServerCe. Je suis allé au projet avec l'ancienne version, j'ai supprimé la référence, puis j'ai ajouté la bonne référence.
Vous n'avez pas besoin d'ouvrir chaque assembly pour déterminer les versions des assemblys référencés.
la source
Mike Hadlow a publié une petite application console appelée AsmSpy qui répertorie plutôt bien les références de chaque assemblage:
Il s'agit d'un moyen beaucoup plus rapide d'aller au bas de l'avertissement MSB3247 que de dépendre de la sortie MSBuild.
la source
Parfois, la réponse @AMissico ne suffit pas. Dans mon cas, je n'ai pas trouvé l'erreur dans les fenêtres de sortie, j'ai donc décidé de créer un fichier journal et de l'analyser, en procédant comme suit:
Enregistrement du journal de génération dans un fichier ... https://msdn.microsoft.com/en-us/library/ms171470.aspx
msbuild MyProject.proj /fl /flp:logfile=MyProjectOutput.log;verbosity=detailed
Recherchez le texte:
warning MS...
ou les informations d'avertissement spécifiques: (par exemple, ligne 9293)Found conflicts between different versions...
et le détail complet de l'erreur de conflit sera au-dessus de ce message (par exemple, ligne 9277)There was a conflicts between...
Visual Studio 2013
la source
J'ai constaté que (au moins dans Visual Studio 2010), vous devez définir la verbosité de sortie sur au moins détaillée pour pouvoir détecter le problème.
Il se peut que mon problème soit une référence qui était auparavant une référence GAC, mais ce n'était plus le cas après la réinstallation de ma machine.
la source
J'ai eu la même erreur et je n'ai pas pu le comprendre avec les autres réponses. J'ai trouvé que nous pouvons «consolider» les packages NuGet.
la source
Cet avertissement généré pour la version bêta par défaut d'ASP.NET MVC 4 voir ici
la source
Utilisez un lecteur de dépendances
À l'aide de dep.exe, vous pouvez répertorier toutes les dépendances imbriquées d'un dossier entier. Combiné avec des outils Unix comme grep ou awk, il peut vous aider à résoudre votre problème
Recherche d'assemblys référencés dans plusieurs versions
Cette ligne de commande obscure exécute dep.exe, puis redirige la sortie deux fois vers awk
Comprendre comment cet assemblage a été tiré dans votre bac
Dans cet exemple, l'outil vous montrerait que System.Web.Http 5.2.3 provient de votre dépendance à FooLib tandis que la version 4.0.0 provient de BarLib.
Ensuite, vous avez le choix entre
Comment exécuter ces choses dans Windows
Si vous n'avez pas de shell de type Unix, vous devrez en télécharger un avant de pouvoir exécuter
awk
etgrep
. Essayez l'une des solutions suivantesla source
J'ai également eu ce problème et j'ai utilisé les conseils d'AMissico pour découvrir le problème (bien que j'ai dû définir le niveau de verbosité sur Détaillé.
Le problème était en fait assez simple mais après avoir trouvé le coupable.
Contexte: j'ai mis à niveau mon projet de VS2008 à VS2010. Dans VS2008, le cadre cible était de 3,5 et lorsque je l'ai introduit dans VS2010, je l'ai changé en 4 (complet). J'ai également mis à niveau certains composants tiers, y compris les rapports Crystal.
Il s'est avéré que la plupart des références système pointaient vers la version 4.0.0.0 mais qu'un couple n'avait pas été automatiquement modifié (System et System.Web.Services) et regardait toujours 2.0.0.0. Crystal Reports fait référence à 4.0.0.0 et c'est donc là que les conflits se produisaient. Il suffit de placer le curseur sur la première bibliothèque système dans l'explorateur de solutions, de déplacer le curseur vers le bas de la liste et de rechercher des références à 2.0.0.0, de supprimer et de rajouter une version plus récente 4.0.0.0.
Ce qui était étrange, c'est que la plupart des références avaient été correctement mises à jour et si ce n'était pas pour les rapports Crystal, je ne l'aurais probablement jamais remarqué ...
la source
J'ai fait une application basée sur l' application Mike Hadlow: AsmSpy .
Mon application est une application WPF avec interface graphique et peut être téléchargée à partir de mon serveur Web domestique: AsmSpyPlus.exe .
Le code est disponible sur: GitHub
la source
Comme mentionné ici , vous devez supprimer les références inutilisées et les avertissements disparaîtront.
la source
Le gestionnaire de génération ASP.NET construit le site Web en parcourant les dossiers par ordre alphabétique, et pour chaque dossier, il comprend ses dépendances et crée d'abord les dépendances, puis le dossier sélectionné.
Dans ce cas, le dossier problématique qui est ~ / Contrôles, est sélectionné pour être construit au début, pour une raison encore inconnue, il y construit certains des contrôles en tant qu'assemblage séparé au lieu de l'intérieur du même assemblage que d'autres contrôles (semble être lié au fait que certains contrôles dépendent d'autres contrôles dans le même dossier).
Ensuite, le dossier suivant qui est construit (~ / Centre de fichiers / Contrôle) dépend du dossier racine ~ / qui dépend de ~ / Contrôles, donc le dossier ~ / Contrôles est reconstruit seulement cette fois les contrôles qui ont été séparés à leur propre assemblage sont désormais joints au même assemblage que les autres contrôles, l'assemblage séparé étant toujours référencé.
Donc, à ce stade, l'assemblage 2 (au moins) a les mêmes contrôles et la génération échoue.
Bien que nous ne sachions toujours pas pourquoi cela s'est produit, nous avons pu contourner ce problème en changeant le nom du dossier Controls en ZControls, de cette façon, il n'est pas construit avant ~ / File-Center / Control, seulement après et de cette façon, il est construit Comme il se doit.
la source
Solution rapide:
Faites un clic droit sur la solution -> Gérer les packages NuGet pour la solution -> Sous Consolider, vous pouvez voir si différentes versions du même package ont été installées. Désinstallez différentes versions et installez la dernière.
la source
Parfois, cela
AutoGenerateBindingRedirects
ne suffit pas (même avecGenerateBindingRedirectsOutputType
). La recherche de toutes lesThere was a conflict
entrées et leur correction manuelle une par une peut être fastidieuse, j'ai donc écrit un petit morceau de code qui analyse la sortie du journal et les génère pour vous (dumps tostdout
):Astuce: utilisez MSBuild Binary et Structured Log Viewer et générez uniquement des redirections de liaison pour les conflits dans le projet qui émet l'avertissement (c'est-à-dire, uniquement après ces
there was a conflict
lignes dans le fichier texte d'entrée pour le code ci-dessus [AssemblyConflicts.txt
]).la source
Un moyen le plus simple sans que l'on prenne en compte les dépendances (internes):
Dans mon cas, il y avait un problème avec la référence MySQL. D'une certaine manière, je pourrais en énumérer trois versions sous la liste de toutes les références disponibles. J'ai suivi les processus 1 à 6 ci-dessus et cela a fonctionné pour moi.
la source
Ajout de Visual Studio pour Mac Community:
Comme la réponse d'AMissico nécessite de modifier le niveau de journalisation et que ni ASMSpy ni ASMSpyPlus ne sont disponibles en tant que solution multiplateforme, voici un court ajout pour Visual Studio pour Mac:
C'est dans Visual Studio Community → Préférences ... → Projets → Journal de build → verbosité
la source
Si vous disposez d'un resharper, supprimez toutes les références inutilisées sur votre solution.
la source