.net - télécharger - visual studio for the web




Conflits trouvés entre différentes versions du même assembly dépendant qui n'ont pas pu être résolus (11)

Lorsque je nettoie et puis construit ma solution qui a plusieurs projets, la fenêtre de sortie signale que la génération a réussi. Cependant, quand je regarde la fenêtre de liste d'erreurs , il me montre cet avertissement:

Conflits trouvés entre différentes versions du même assembly dépendant qui n'ont pas pu être résolus. Ces conflits de référence sont répertoriés dans le journal de génération lorsque la verbosité du journal est définie sur détaillé. C: \ Fichiers de programme (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets

Lorsque je double-clique sur ce message, il ouvre le fichier C: \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets mais je n'y comprends rien.

J'utilise Visual Studio Express 2013 pour le Web.

Comment puis-je savoir ce qui ne va pas et avec quelle DLL et comment puis-je faire disparaître l'avertissement?


et comment puis-je faire partir l'avertissement?

Vous devrez probablement reinstall ou mettre à jour vos paquets NuGet pour résoudre ce problème.


Évidemment, il y a beaucoup de causes différentes et donc beaucoup de solutions à ce problème. Pour jeter le mien dans le mix, nous avons mis à jour un assembly (System.Net.Http) précédemment référencé directement dans notre projet Web vers une version gérée par NuGet. Cela a supprimé la référence directe dans ce projet, mais notre projet de test contenait toujours la référence directe. La mise à niveau des deux projets pour utiliser l'assembly géré par NuGet a résolu le problème.


Changer la verbosité de construction dans Visual Studio aidera à pointer dans la bonne direction. Suivez les étapes ci-dessous pour modifier la verbosité dans VS

1. Go to Tools->Options menu in VS
2. Open Projects and Solutions->Build and Run 
3. Change the value of the MSBuild project build output verbosity. 
   Pick one from Quiet, Minimal, Normal, Detailed and Diagnostic

Vérifiez la fenêtre de sortie (cntl + alt + o) dans VS pour les changements dans la construction



Exécuter la commande Update-Package via la console du gestionnaire de packages

Cela corrigera MSB3277, de quoi réinstalle-t-il tous les paquets et tous les assemblages associés avec la version la plus haute possible . Il est également possible de mettre à jour un paquet spécifique. Ou rétrograder après mise à jour si vous le souhaitez, ce problème résolu pour moi quelques fois il est venu. Selon le nombre de paquets de nugets que vous avez, ce processus peut prendre quelques minutes.

Plus d'informations sur les documents officiels https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages


Exécutez msbuild Foo.sln /t:Rebuild /v:diag (à partir de C:\Program Files (x86)\MSBuild\12.0\bin ) pour construire votre solution à partir de la ligne de commande et obtenir un peu plus de détails, puis trouver le .csproj. qui enregistre l'avertissement et vérifie ses références et références d'autres projets qui utilisent le même assembly commun qui diffère dans la version.

Edit: Vous pouvez également définir la verbosité de construction directement dans VS2013. Allez dans le menu Tools > Options , puis allez dans Projects and Solutions et définissez la verbosité MSBuild à Diagnostic .

Edit: Peu de clarifications car j'en ai eu moi-même. Dans mon cas, l'avertissement était dû à l'ajout d'une référence à l'aide de l'invite Resharper, par opposition à la boîte de dialogue Ajouter une référence, qui le faisait sans version même si les deux versions v4 et v12 étaient disponibles.

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework" />

contre

<Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
<Reference Include="Microsoft.Build.Framework, Version=12.0.0.0, ..." />

Dans le journal MSBuild avec /v:diag verbosity, il ressemblait à ce qui suit. donnant des détails que deux références en conflit: -

  There was a conflict between 
  "Microsoft.Build.Framework, Version=4.0.0.0, ..." and 
  "Microsoft.Build.Framework, Version=12.0.0.0, ...". (TaskId:16)

      "Microsoft.Build.Framework, Version=4.0.0.0, ..." was chosen because it was primary and 
      "Microsoft.Build.Framework, Version=12.0.0.0, ..." was not. (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=4.0.0.0, ..." 
      [C:\...\v4.5.1\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v4.5.1\Microsoft.Build.Framework.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v4.5.1\Microsoft.Build.Framework.dll". (TaskId:16)
              Microsoft.Build.Framework (TaskId:16)

      References which depend on "Microsoft.Build.Framework, Version=12.0.0.0, ..." 
      [C:\...\v12.0\Microsoft.Build.Framework.dll]. (TaskId:16)

          C:\...\v12.0\Microsoft.Build.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

          C:\...\v12.0\Microsoft.Build.Engine.dll (TaskId:16)
            Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.Engine.dll". (TaskId:16)
              Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)

C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3277: 
Found conflicts between different versions of the same dependent assembly that could not be resolved.  
These reference conflicts are listed in the build log when log verbosity is set to detailed. 
[C:\Users\Ilya.Kozhevnikov\Dropbox\BuildTree\BuildTree\BuildTree.csproj]

J'ai découvert que, parfois, les paquets nuget s'installent (ce que je suppose). Les composants requis par NET Core ou d'autres éléments qui entrent en conflit avec le framework déjà installé. Ma solution était d'ouvrir le fichier projet (.csproj) et de supprimer ces références. Par exemple, System.IO, System.Threading et autres ont tendance à être ajoutés lorsque Microsoft.Bcl est inclus via un package NuGet récemment installé. Il n'y a pas de raison pour des versions spécifiques de ceux de mes projets, donc j'enlève les références et les builds du projet. J'espère que cela pourra aider.

Vous pouvez rechercher votre fichier de projet pour "référence" et supprimer les conflits. S'ils sont inclus dans System, débarrassez-vous d'eux, et la construction devrait fonctionner. Cela peut ne pas répondre à tous les cas de ce problème - je m'assure que vous savez ce qui a fonctionné pour moi :)

Exemple de ce que j'ai commenté:

<!-- <Reference Include="System.Runtime, Version=2.6.9.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> -->
  <!-- <HintPath>$(SolutionDir)packages\Microsoft.Bcl.1.1.9\lib\net40\System.Runtime.dll</HintPath> -->
  <!-- <Private>True</Private> -->
<!-- </Reference> -->


J'ai désinstallé Microsoft ASP.NET MVC nuget.org de la gestion de NuGet Packagaes et l'ai de nouveau réinstallé. En le réinstallant il a résolu tous les conflits liés à la version de rasoir. Essayez-le.


Je ne peux que soutenir la réponse de Ruben avec une comparaison entre les deux messages affichés:

et le message:

C: \ Fichiers programme (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1697,5): avertissement MSB3277: trouvé des conflits entre les différentes versions du même assembly dépendant qui n'a pas pu être résolu. Ces conflits de référence sont répertoriés dans le journal de génération lorsque la verbosité du journal est définie sur détaillé .

Donc, Ruben a raison, ce n'est pas vrai. Il n'y a aucun conflit, juste un assemblage manquant. Ceci est particulièrement ennuyeux lorsque le projet est une application ASP.NET, puisque les vues sont compilées à la demande , c'est-à-dire juste avant d'être affichées pour la première fois. C'est quand il devient nécessaire d'avoir l'ensemble disponible. (Il existe une option pour précompiler les vues avec le reste du code, mais ceci est une autre histoire .) D'un autre côté, si vous définissez la verbosité sur Diagnostic, vous obtenez la sortie suivante:

C: \ Fichiers programme (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1697,5): avertissement MSB3245: Impossible de résoudre cette référence. Impossible de localiser l'assembly "System.Web.Razor, Version = 3.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL". Vérifiez que l'assemblage existe sur le disque. Si cette référence est requise par votre code, vous risquez d'obtenir des erreurs de compilation.

En conséquence, tout ce que vous devez faire est soit:

  1. Ajoutez manuellement une référence à l'assembly (localisez-la sur le disque, peut-être GAC, et ajoutez-la en tant que référence "directe"), ou
  2. Utilisez le package NuGet (s'il est publié dans la galerie) pour le télécharger et référencer l'assemblage qu'il contient.

Plus d'informations sur la galerie NuGet here . En savoir plus sur la précompilation des vues ASP.NET here .


Je pourrais résoudre cette installation Newtonsoft Json dans le projet web avec des paquets de nugget


Si vous avez apporté des modifications aux packages, rouvrez le sln. Cela a fonctionné pour moi!





visual-studio-express