8
votes

Storagefile Async Usage dans une application non métropolitaine

J'essaie de créer une instance de stockageFile dans ma bibliothèque de classe ...

var localFolder = ApplicationData.Current.LocalFolder;
StorageFile destinationFile = await localFolder.CreateFileAsync(destination, CreationCollisionOption.GenerateUniqueName);


1 commentaires

Dans le style de métro, y a-t-il des instructions supplémentaires en utilisant le fichier de code?


4 Réponses :


5
votes

On dirait que vous essayez d'utiliser un type à partir des bibliothèques WinRT, car le Storagefile Documentation de la classe States Il s'applique uniquement à Metro et se trouve dans Windows.Storage .

Ce blog post passe Comment le construire, mais il semble être un processus manuel. Il détaille également la cause de l'erreur:

Utiliser le mot clé attendre provoque le compilateur à rechercher un escapade méthode sur cette interface. Depuis que iaisyncoperération ne Définissez une méthode d'escapade, le compilateur veut chercher un Méthode d'extension.

Fondamentalement, on dirait que vous devez ajouter une référence à: system.runtime.windowsruntime.dll

Veuillez prendre le temps de lire son poteau de blog, mais je mettrai la partie importante ici pour la clarté.


Contenu blog ci-dessous non légalisé

premier, dans le bloc-notes, je créé le code source C # suivant enumdevices.cs: xxx p> second, j'ai créé un fichier build.bat que je passe à partir de l'invite de commande de développeur pour créer ce code (cela devrait Soyez 1 ligne mais je l'enveloppe ici pour la capacité de lecture): xxx

puis, à l'invite de commande, je viens d'exécuter l'énumdevices.exe pour voir la sortie.


5 commentaires

Je pense que cela devrait être souligné ce que Jeffrey Richter Metionses dans son poste: L'assemblée manquante est System.Runtime.windowsRuntime.dll.


Les gars, merci pour la réponse rapide ... J'essayais d'utiliser le téléchargeur de fond d'une application WPF sous Windows 8 (dans un contexte non métropolitain), mais je suppose que ce n'est pas une bonne idée et il est préférable d'utiliser des bits. ... Mais je pense que l'utilisation de l'Interop avec le WindowsRuntime n'est pas une bonne idée ...


J'obtiens l'erreur suivante lors de la tentative d'exécution de l'exemple à partir du blog: numdevices.cs (14,35): Erreur CS4028: 'attendre' exige que le type 'Windows.Foundation.iaSyncoperation 'avoir une méthode d'escapade appropriée. Vous manquez une directive pour «système»?


@Hjulle Avez-vous une déclaration en utilisant le haut du fichier? à l'aide du système; . En outre, utilisez-vous une version assez tardive de VS sur la version C # correspondante pour obtenir le support sur mot clé ?


Oui, j'ai copié l'exemple exactement. Je suppose qu'il a attendre prise en charge des mots-clés car il recherche une méthode getawaiter CSC fourni avec le fichier d'exécution .NET 4.5.



1
votes

Ça doit être long depuis le poste quand je Après avoir ajouté des références:
System.runtime.windowsruntime.dll
System.threading.tasks.dll

et ciblant Windows 8 dans le fichier de projet: xxx

mentionné ci-dessus exemple peut être compilé dans vs.


1 commentaires

S'il vous plaît poster une question distincte si vous voulez demander quelque chose.



10
votes

Qu'est-ce qui a fonctionné pour moi est de "manuellement" ajouter le groupe cibleplatformversion xxx

et dans l'élément d'élément Ajoutez les éléments suivants xxx

alors projet devrait compiler normalement.


0 commentaires

8
votes

J'ai eu le même problème.Le problème était l'espace de noms système manquant dans l'en-tête de l'espace de noms.Je vient d'inclure le système dans l'espace de noms et cela a fonctionné. J'espère que cela aide.


0 commentaires