6

Je tente de réécrire un projet dans une bibliothèque de classes portable. Mais le problème est qu'il utilise Async CTP, et je ne peux pas le compiler comme une bibliothèque pour WP et Windows Store App. Si je ne contient pas de référence AsyncCtpLibrary.dll, compilateur dit queUtilisation de CTP Async avec la bibliothèque de classes portable

Le type ou le nom espace de noms « tâches » n'existe pas dans l'espace de noms « System.Threading » (vous manque une référence d'assemblage?)

Si je l'inclure, le compilateur dit toujours les mêmes erreurs et ajoute un avertissement:

la référence principale « AsyncCtpLibrary » ne pouvait pas être résolu, car il a une dépendance indirecte sur l'ensemble cadre « mscorlib, version = 4.0.0.0, Culture = neutre, PublicKeyToken = b77a5 c561934e089 "qui n'a pas pu être résolu dans le cadre actuellement ciblé. ".NETPortable, Version = v4.0, Profil = Profil104". Pour résoudre ce problème, supprimez la référence "AsyncCtpLibrary" ou recibler votre application vers une version d'infrastructure qui contient "mscorlib, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = b77a5c561934e089".

Comment devrais-je supporter cela?

Répondre

3

réponse simple - AsyncCTP ne fonctionne pas dans Visual Studio 2012 et ne peut être utilisé dans aucun projet. Pour .NET 4.0 et Silverlight 5, vous pouvez installer Async Targeting Pack à partir de NuGet qui fonctionne de la même manière.
Async/await est dans Portable Class Library pris en charge uniquement lorsque vous ciblez WinRT, .NET4.5 ou Windows Phone 8 et même alors l'utilisation est assez limitée. Je ne peux pas entrer dans plus de détails ici, parce que le Windows Phone 8 SDK est toujours sous NDA.
Pour WP7.5 et VS2012, il n'y a actuellement aucun moyen d'utiliser async/await, mais le Pack de ciblage Async mis à jour pour cette plate-forme devrait être disponible à un moment donné.
Notez également que les packs de ciblage AsyncCTP et Async ne peuvent pas être utilisés dans les bibliothèques de classes portables et qu'il est peu probable que cela change dans le futur. Le résultat est dans VS2010 vous ne pouvez pas utiliser async/await dans les bibliothèques de classes portables.

+0

Donc, je devrais garder deux versions de classes différentes pour chaque projet? – passick

+2

J'ai résolu ce problème dans VS2010 - J'ai fini avec un dossier de projet pour ma logique d'application avec deux fichiers csproj, un pour WinRT et un second pour WP7.5. Je fais ensuite référence aux mêmes fichiers dans les deux projets et j'utilise aussi des variables de construction conditionnelles comme #if etc. Cela fonctionne très bien avec quelques limitations. –

+1

Vous êtes également sous NDN de ne même pas mentionner que vous pourriez être impliqué dans le wp8sdk - première règle du club de combat! :) – Stuart

1

Vous pouvez essayer d'utiliser le projet AsyncBridge à la place de l'AsyncCTP. Je ne sais pas si ça va aider. Vous devrez compiler VS2012 pour obtenir que cela fonctionne bien (vous pouvez toujours cibler .NET4.0):

+0

Existe-t-il un autre moyen de le faire? Parce que je développe pour wp sous Windows 7 avec vs2010. – passick

+1

vous pourriez essayer de compiler le projet qui a besoin d'un support asynchrone dans VS2012, puis de référencer ces dll dans votre projet VS210 – RoelF

5

Vous ne pouvez actuellement utiliser async/await dans portable pour cibler les applications .NET 4.5 et Windows Store. En dehors de portable, vous pouvez utiliser le Pack de ciblage asynchrone pour .NET 4.0 et Silverlight 5.

En disant que, cependant, nous travaillons sur un pack de ciblage asynchrone mis à jour qui ajoute le support pour async/wait en portable lors du ciblage Phone 7.5 , Silverlight 5 et .NET 4.0, voir: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2691068-support-async-in-portable-class-libraries. Vous verrez ce début d'octobre.

Mise à jour: Nous venons de publier une version bêta de ceci: http://blogs.msdn.com/b/bclteam/archive/2012/10/22/using-async-await-without-net-framework-4-5.aspx.

Questions connexes