8

クラス ライブラリに StorageFile のインスタンスを作成しようとしています...

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

VS11 はビルドしていません:「await」には、タイプ「Windows.Foundation.IAsyncOperation」に適切な GetAwaiter メソッドが必要です。「システム」の使用ディレクティブがありませんか?

明らかに私は.net 4.5をターゲットとして使用しており、Windowsアセンブリを参照しています...このコードがMetroStyleで機能するのにクラスライブラリでビルドされない理由がわかりません...クラスライブラリでStoragefileのインスタンスを作成するにはどうすればよいですか? ?? この段階では、ファイルが非同期で作成されているかどうかは重要ではありません...

あなたの考えを教えてください... Stelio

4

4 に答える 4

10

私にとってうまくいったのは、TargetPlatformVersionを「手動で」追加することです

<PropertyGroup>
  <TargetPlatformVersion>8.0</TargetPlatformVersion>
</PropertyGroup>

そしてアイテムグループに以下を追加します

<ItemGroup>
  <Reference Include="System.Runtime.WindowsRuntime" />
  <Reference Include="System.Runtime" />
  <Reference Include="Windows" />
</ItemGroup>

その後、プロジェクトは正常にコンパイルされます。

于 2013-11-01T17:17:25.683 に答える
5

WinRTライブラリの型を使用しようとしているようです。これは、StorageFile クラスのドキュメントに、Metroにのみ適用され、にあると記載されているためですWindows.Storage

このブログ投稿では、それを構築する方法について説明していますが、手動のプロセスのようです。また、エラーの原因についても詳しく説明します。

awaitキーワードを使用すると、コンパイラはこのインターフェイスでGetAwaiterメソッドを検索します。IAsyncOperationはGetAwaiterメソッドを定義していないため、コンパイラは拡張メソッドを探します。

基本的に、次への参照を追加する必要があるようです。System.Runtime.WindowsRuntime.dll


時間をかけて彼のブログ投稿を読んでください。ただし、わかりやすくするために重要な部分をここに記載します。


以下のブログコンテンツは、不用意に盗聴されています

まず、メモ帳で、EnumDevices.csに次のC#ソースコードを作成しました。

using System;
using System.Threading.Tasks;
using Windows.Devices.Enumeration;
using Windows.Foundation;

class App {
    static void Main() {
        EnumDevices().Wait();
    }

    private static async Task EnumDevices() {
        // To call DeviceInformation.FindAllAsync:
        // Reference Windows.Devices.Enumeration.winmd when building
        // Add the "using Windows.Devices.Enumeration;" directive (as shown above)
        foreach (DeviceInformation di in await DeviceInformation.FindAllAsync()) {
            Console.WriteLine(di.Name);
        }
    }
}

次に、Developer Command Promptから実行してこのコードをビルドするBuild.batファイルを作成しました(これは1行である必要がありますが、読み取り能力のためにここでラップします)。

csc EnumDevices.cs  
/r:c:\Windows\System32\WinMetadata\Windows.Devices.Enumeration.winmd  
/r:c:\Windows\System32\WinMetadata\Windows.Foundation.winmd 
/r:System.Runtime.WindowsRuntime.dll  
/r:System.Threading.Tasks.dll

次に、コマンドプロンプトで、EnumDevices.exeを実行して出力を確認します。

于 2012-05-03T09:30:42.817 に答える
1

参照を追加した後:
System.Runtime.WindowsRuntime.dll
System.Threading.Tasks.dll

プロジェクトファイルでWindows 8をターゲットにしています:

  <PropertyGroup>
    <TargetPlatformVersion>8.0</TargetPlatformVersion>
  </PropertyGroup>

上記の例はVSでコンパイルできます。

于 2013-08-08T14:14:57.147 に答える