2016-07-20 5 views
2

Xamarin、ポータブルマルチプラットフォームソリューション、ポータブルプロジェクトセクションPCLCrypto.dllランタイムエラー

MD5ハッシングについては、クラスmd5を作成します。プロジェクトのレファレンスPCLCrypto.dllに追加します。

using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Text; 
 
using PCLCrypto; 
 
using static PCLCrypto.WinRTCrypto; 
 

 

 
namespace WCHSBMobile 
 
{ 
 
    public static class md5 
 
    { 
 
     public static string GetMD5hash(string data) 
 
     { 
 
      //string result = data; 
 
      IHashAlgorithmProvider algoProv = PCLCrypto.WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Md5); 
 
      byte[] dataB = Encoding.UTF8.GetBytes(data); 
 
      byte[] dataHash = algoProv.HashData(dataB); 
 
      var hex = new StringBuilder(dataHash.Length * 2); 
 
      foreach (byte b in dataHash) 
 
      { 
 
       hex.AppendFormat("{0:x2}", b); 
 
      } 
 
      return hex.ToString(); 
 
      //return result; 
 
     } 
 

 
    } 
 
}

この行にAndroid上でテストするとき、私は(HashAlgorithm.Md5)ランタイムエラーIHashAlgorithmProvider algoProv = PCLCrypto.WinRTCrypto.HashAlgorithmProvider.OpenAlgorithmを取得します。エラーが発生する PCLCrypto.NotImplementedByReferenceAssemblyException:これは参照アセンブリであり、実装は含まれていません。プラットフォーム実装アセンブリが実行時に使用されるように、PCLCryptoパッケージをアプリケーションにインストールしてください。 どうすればよいですか?あなたは私に何か解決策をアドバイスできますか? ありがとうございます

+0

PCLCrypto NugetパッケージをAndroid固有のプロジェクトに追加しましたか?プラットフォーム固有のコードを使用する必要があるため、PCLCryptoをPCLおよび各プラットフォームに追加する必要があります。 – dylansturg

+0

VSを更新する前に正常にビルドしたプロジェクトで、同じエラーが発生しました。 はい、私はすべてのプロジェクトでPCLCryptoを持っています。 – Thomas

+0

デバイスからアプリケーションをアンインストールしてから展開した後、かなり変わった – Thomas

答えて

3

私はこの問題をXamarinアプリで実行しました。ディラン-Sとトーマスのコメントで示唆したように、次の手順を試してください:

  • アンインストール
  • Enusure PCLCrypto Nugetパッケージは、Androidのプロジェクトだけでなく、ポータブルプロジェクトにインストールされているアプリ。
+0

これはAWSSDK.CoreとAWSSDK.SQSを使用したXamarin Androidプロジェクトで役に立ちました。どちらもPCLにありますが、Androidプロジェクトに両方を追加する必要もありました。 –

+0

ありがとう!重要なことは、図書館はポータブルプロジェクトに含まれていなければならず、メインプロジェクト自体でもXamarinプロジェクトなしでも使用できることです。 – Hunv

3

J. Andrew Laughlinが提示した手順の他に、私にとってはXamarin Studioでアプリを再構築したり、アプリをクリーンアップして再度ビルドしたりすることでした。

+1

ここにも同じです。 VSのソリューションをきれいにしました。 –