Des problèmes avec des références à des TPL Dataflow et TPL dans visual studio 2012 RC
J'ai juste mis à niveau de Visual Studio 11 Beta pour le nouveau Visual Studio 2012 RC et ont des problèmes de référencement TPL Dataflow.
Tout d'abord, j'ai essayé de faire référence à des Flux de données, comme je l'ai fait précédemment, par l'ajout d'une référence à partir du cadre. Mais quand j'essaie de le faire, j'obtiens une erreur de la boîte:
Une référence à un " Système.Le filetage.Les tâches.Flux de données " ne peut pas être ajouté.
et puis l'ensemble de Visual Studio se fige.
Après la lecture de MEF et TPL Dataflow les Packages NuGet .NET Framework 4.5 RC, j'ai pris la version de Flux de données qui a montré dans la liste des références est une sorte d'artefact de l'installation précédente. Donc, j'ai essayé à l'aide de Flux de données à partir de NuGet, qui semblait fonctionner, jusqu'à ce que j'ai effectivement essayé de compiler mon code, car j'ai eu une erreur:
Le type de Système.Le filetage.Les tâches.La tâche est définie dans une assemblée qui n'est pas référencé. Vous devez ajouter une référence à l'assembly 'Système.Le filetage.Tâches, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Ceci est source de confusion, parce que Task
est dans mscorlib, pas d'autres références devrait être nécessaire. Mais il y a un ensemble de référence appelé System.Threading.Tasks
dans la liste des références, j'ai donc essayé de le rajouter. Malheureusement, un familier erreur a montré:
Une référence à un " Système.Le filetage.Les tâches " ne peut pas être ajouté.
et puis Visual Studio gelé à nouveau.
Je fais quelque chose de mal? Comment puis-je utiliser TPL de Flux de données avec visual studio 2012 RC?
Le problème se produit lors de la création d'un nouveau projet. L'ouverture d'un projet créé avec VS11 Bêta qui ont déjà utilisé TPL Dataflow fonctionne très bien.
j'ai posté ce bug pour vous Connecter.
Vous rapport de bogue ne peut pas être accessible par d'autres personnes.
Vous avez raison, désolé, je n'avais pas remarqué. Devrait être corrigé maintenant.
OriginalL'auteur svick | 2012-06-03
Vous devez vous connecter pour publier un commentaire.
Essayer de "Ajouter une Référence" le
System.Threading.Tasks.dll
explicitement à partir deC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5
. Alternativement, vous pouvez utiliserC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades
répertoire.Mis à JOUR: j'ai examiné le problème le plus après la lecture de la réponse sur la suppression de la référence à
System.Runtime
et je peux ajouter les suivantes: La référence àSystem.Runtime
sera ajoutée en raison de l'erreur dans le currect version de package NuGetMicrosoft.Tpl.Dataflow.4.5.1-rc
. Si l'on ajoute la référence à la mêmeSystem.Threading.Tasks.Dataflow.dll
directement dans Visual Studio pasSystem.Runtime
de référence sera ajouté et aucun problème n'existe pas.À l'aide de NuGet Package Explorer on peut télécharger l'origine de
Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
de la "NuGet package officiel de la source". À la fin de l'ensemble Matadata on va voirOn peut modifier les métadonnées (appuyez sur Ctrl-K) et de supprimer la référence:
Après on peut enregistrer le fichier modifié
Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
dans un répertoire. Après l'ajout de nouveaux emplacement (dans le répertoire local) dans la liste des NuGet sources (voir ici ou ici) sera en mesure d'ajouter un nouveau package à partir de la source locale (n'oubliez pas de choisir d'afficher tous les paquets inclusive pré-version, voir la photo ci-dessous):De la modification de la
Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
ne sera pas ajouterSystem.Runtime
et le projet est compilé sans erreurs.De sorte que le bug existe pas dans Visual Studio 2012 RC et même pas dans
Microsoft.Tpl.Dataflow.dll
. Le bug est juste dans les métadonnées de la pré-version deMicrosoft.Tpl.Dataflow
NuGet package disponible actuellement sur "NuGet package officiel source".Vous pouvez poster le rapport de bogue à l' les auteurs de sorte que le paquet sera fixe.
Mise à JOUR 2: Même si ma réponse sont déjà marqué comme résolu et le bounty décerné le problème n'est toujours pas aller de ma tête. En réalité, je vois deux problèmes:
System.Runtime
peut produire l'erreur lors de la builging du projet.Laissez-nous nous acceptons seulement le fait que le premier problème qui existent indépendamment de la raison. Le deuxième problème me font de l'agitation. Je vois le vrai problème ici. Tout le monde peut faire l'expérience suivante pour me comprendre mieux:
System.Runtime
.System.Runtime
etSystem.Threading.Tasks.Dataflow
sont inclus dans la liste de Références du projet.System.Threading.Tasks.Dataflow
sont supprimés de la liste de Références du projet, maisSystem.Runtime
est toujours dans la liste des références.J'ai fait une nouvelle expérience et j'ai changé la version modifiée
Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
, où j'ai supprimé la référence àSystem.Runtime
, de4.5.1-rc
à4.5.1-rc1
et enregistré localement (il sera enregistré sousMicrosoft.Tpl.Dataflow.4.5.1-rc1.nupkg
). Après que j'ai pu voir la "nouvelle" version dans la liste des Mises à jour de mon projet:Si j'installe la mise à Jour de la référence à
System.Runtime
sera également pas supprimé.Donc le courant de mise en œuvre de la "mise à Jour" et "Désinstaller" de NuGet a le bug ou d'une conception générale du problème. Si nous avons ajouté un paquet à notre projet et de faire certaines mises à jour du projet, nous allons obtenir des références de tous les assemblys dépendants de toutes les anciennes versions. Les anciennes références, ajouté par NuGet à partir d'anciennes versions des paquets, seront pas supprimés lors de la Désinstallation ou la mise à Jour. Tout d'abord, il n'est pas bon lui-même d'avoir des ordures dans les références du projet, mais en raison de l'existence le premier problème (erreur lors de la compilation si la référence à la non référencées
System.Runtime
existe pas), le problème sera encore plus grave.Donc, si rien ne sera changé dans les NuGet la mise à jour vers la version suivante de
Microsoft.Tpl.Dataflow
ne résoudra pas le problème pour les utilisateurs qui ont installéMicrosoft.Tpl.Dataflow
dans la version 4.5.1 (ou probablement de la première version). Tous les utilisateurs auront à supprimer la référence àSystem.Runtime
manuellement. Je pense que c'est de la vraie NuGet problème qui doit être résolu par NuGet développeurs. Je vais poster la description du problème à http://nuget.org/ plus tard.Le rapport de bug que j'ai posté à NuGet peut être trouvé ici (désolé de ne pas parfaite mise en forme du texte).
Je n'ai pas étudié la question en détail. Sans la référence à la nouvelle version de
System.Threading.Tasks.Dataflow
essayé d'utiliser une version incorrecte deSystem.Threading.Tasks.dll
. Je n'ai pas utilisé TPL Dataflow avant. J'ai juste copié le code de démonstration à partir de la page et l'erreur que vous avez décrit et l'erreur dans la ligneworkerBlock.Completion.Wait();
: Attendre méthode est de ne pas exister. Il est clair que Microsoft a modifié certaines classes, et je l'habitude de mal assemblée. Donc, on n'avait plus qu'à trouver la bonne.Par la façon que j'ai trouvée à la fin de le blog l'astuce pour ajouter la même référence que j'ai aperçue dans ma réponse. Il semble donc que vous n'êtes pas la première personne qui a le problème.
J'ai mis à jour ma réponse.
Merci pour les détails. Je ne pense pas que informant les auteurs du package NuGet est nécessaire, car Alok Shriram, qui est classé parmi les propriétaires de ce package, est celui qui a répondu le social.msdn avec le Système.Runtime corrigé et a dit qu'il sera corrigé dans la prochaine version (pas sûr qu'il signifiait prochaine version du paquet ou de Visual Studio).
OriginalL'auteur Oleg
Selon Alok Shriram à partir de MS, la solution est de supprimer la référence au Système.Runtime, et que ce sera corrigé dans la prochaine version.
Je peux confirmer que la suppression de la référence en fait résout le problème.
System.Runtime.dll
du projet est de mieux que d'ajouter une nouvelle référenceSystem.Threading.Tasks.dll
. De l'autre côté il n'est pas vraiment clair pourquoi, le conflit existe. J'ai examiné le Manifeste deSystem.Runtime.dll
à l'égard de "IL Désassembleur" (ildasm.exe) et ne pouvait pas voir les conflits. Donc, pour moi, les deux façons sont comme: "Fais cela et le problème sera résolu". Donc, je peux répéter la même question que vous m'avez demandé d'abord: "Aucune idée pourquoi cela arrive?"Ouais, j'aimerais bien le savoir aussi. SR ne contiennent pas de AssemblyRef à l'IOP, donc je n'ai aucune idée pourquoi le retirer de l'aide.
En outre, la référence à
System.Runtime
a été ajouté par l'exécution deInstall-Package Microsoft.Tpl.Dataflow -Pre
, mais l'un fichiersystem.threading.tasks.dataflow.xml
ne contiennent pas deSystem.Runtime
texte. Si nous avons un peu de montage des problèmes de chargement de nous pourrait utiliser les Fuslogvw.exe pour le suivi, mais nous avons erreur de compilation. Par la façon dont j'ai utilisé ReSharper qui aide à supprimer des références inutiles, mais il n'est pas retiréSystem.Runtime
comme d'autres références.Par ailleurs, si on supprimer références puis ajouter manuellement
.\packages\Microsoft.Tpl.Dataflow.4.5.1-rc\lib\net45\System.Threading.Tasks.Dataflow.dll
la deuxième dll (System.Runtime.dll
) sera pas ajouté. Donc je suppose que la raison peut être plus dans le package NuGet. J'ai examiné avec le respect de la Package NuGet Explorer, mais on ne peut pas voir directement toute référence àSystem.Runtime.dll
(au moins dans le GUI de NuGet Package Explorer). Donc, le problème n'est toujours pas complète clair pour moi.Oh je n'étais pas assez attentivement. Le Package NuGet Explorer ne montre que
Microsoft.Tpl.Dataflow
besoinSystem.Runtime.dll
. Dans le Paquet de métadonnées sous "Cadre de Références d'Assembly" voir "le Système de.Runtime". Ainsi, au moins la partie de l'origine du problème:Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
contient la référence àSystem.Runtime.dll
qui est faux.OriginalL'auteur svick