5

私は自分のアプリの iPad バージョンで作業しており、AesCryptoServiceProviderたとえば次の行を使用する機能があります。

 using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
 {
    setAesProviderSettings(aesProvider);
    result = aesProvider.CreateEncryptor().TransformFinalBlock(plainBytes, 0, plainBytes.Length);
 }

Android アプリ (MonDroid) と .NET (WPF) アプリケーションで動作しますが、iOS ではこのエラーが発生しました。

Error  5      The type or namespace name 'AesCryptoServiceProvider' could not be found (are you missing a using directive or an assembly reference?)     

関数はコア プロジェクトにあり、プロジェクト リンカーを使用して iPad プロジェクトで参照します。また、Android バージョンでもプロジェクト リンカーを使用します。もちろん、3 つのプラットフォームでは、必要なすべての参照を含む同じファイルです。Visual Studio 12 で Xamarin を使用しています。

4

1 に答える 1

6

ファクトリ メソッドAes.Create ()を使用すると、さまざまな .NET バージョン/プラットフォーム間でコードの移植性が向上します。例えば

using (var aesProvider = Aes.Create ()) {
   setAesProviderSettings(aesProvider);
   result = aesProvider.CreateEncryptor().TransformFinalBlock(plainBytes, 0, plainBytes.Length);
}

Xamarin.iOS ではAesManaged(からSystem.Core.dll) 返されますが、実際には、(デバイスによっては) ハードウェア アクセラレーションが可能な Apple CommonCrypto (マネージ実装ではありません) を呼び出しています。

于 2013-09-27T14:53:49.117 に答える