私は現在、Xamarinフォームアプリケーション上のAmazonS3データにアクセスするために、AmazonのAWSSDKドキュメント( 特に:this )に従っています。エラーが発生したため、新しいパッケージを使用して新しいプロジェクトを開始しましたが、すべてを知ることができる限り最新であり、それでも同じ問題が発生しています。
クラスの背後にあるメインコードの現在のコードは次のとおりです。
public partial class MainPage : ContentPage
{
private static IAmazonS3 client;
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
public MainPage()
{
InitializeComponent();
// I have tried each of the following:
client = new AmazonS3Client(); <--- ERROR
client = new AmazonS3Client(RegionEndpoint.USWest2); <-- SIMILAR ERROR
client = new AmazonS3Client(bucketRegion); <-- SAME ERROR
// This has a different error, lack of RegionEndpoint, which is expected, but at least this seems to be recognized
client = new AmazonS3Client(new AnonymousAWSCredentials());
}
}
これにより、指定された行で次のruntimeエラーが発生します。
メソッドが見つかりません:void Amazon.S3.AmazonS3Client..ctor()
MethodNotFoundExceptionは、多くの場合、古いバージョンのDLLがぶら下がっている、古い依存関係、重複したアセンブリなどの結果であることを理解していますが、これは、インストールされているパッケージは、最新の標準XamarinパッケージとAmazon.S3パッケージです。
このエラーの原因は何ですか?
この問題は、「古いdll、古い依存関係」などとは関係ありません。以下の例を見ると、デフォルトのctorを呼び出そうとしているのではなく、バケット領域。
AWS SDK for .NET を使用したシンプルなクロスプラットフォームアプリケーション(または、IDEを使用している場合)、デフォルトのctorが使用されている場合、次のことが必要であることがわかります。
このアプリを実行する前に、[デフォルト]プロファイルまたは別のプロファイルで認証情報を指定してから、AWS_PROFILE環境変数を設定する必要があります。リージョンは、[デフォルト]プロファイルで、またはAWS_REGION環境変数を設定して指定する必要があります。
ドキュメントには、App.configを使用できるとも記載されています。
ただし、Xamarinで使用するため、他のオーバーロードの一部を使用する方がはるかに簡単です。それらの一部を次に示します。
クライアントを生成するためにAWSCredentials
を使用するとします。繰り返しますが、ここには多くのオプションがあります:
注意:クライアントを初期化するときは、RegionEndpoint
を指定することをお勧めします。ほとんどの場合、忘れるとAmazonClientException: No RegionEndpoint or ServiceURL configured
が必要であることを思い出させます。
編集:あなたの質問の更新のため、ここに私からの更新があります:あなたが試した同じルールがそこの俳優に適用されます。 Xamarin.Formsアプリには存在しない構成ファイル内の資格情報を探しています。クライアントを使用するには、クライアントの資格情報を知る必要があります。クライアントを使用する必要がある場合は、初期化中にクライアントにいくつかの認証情報を提供します-他のAWSCredentialsのいくつかを使用します-Basic
、Federated
など、または単純なものを使用して、accessKeyId
+ accessKey
を使用します。
あなたが試した、動作していない理由、または舞台裏で何をしているのかが気になる場合は、SDKがオープンソース化されています こちら 。空のctorのコードは here で、より興味深いFallbackCredentialsFactory
here です。