web-dev-qa-db-ja.com

メソッドが見つかりません:void Amazon.S3.AmazonS3Client..ctor()| AmazonS3 w / .NET / Xamarin

私は現在、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パッケージです。

このエラーの原因は何ですか?

6
Nathan Relyea

この問題は、「古いdll、古い依存関係」などとは関係ありません。以下の例を見ると、デフォルトのctorを呼び出そうとしているのではなく、バケット領域

AWS SDK for .NET を使用したシンプルなクロスプラットフォームアプリケーション(または、IDEを使用している場合)、デフォルトのctorが使用されている場合、次のことが必要であることがわかります。

このアプリを実行する前に、[デフォルト]プロファイルまたは別のプロファイルで認証情報を指定してから、AWS_PROFILE環境変数を設定する必要があります。リージョンは、[デフォルト]プロファイルで、またはAWS_REGION環境変数を設定して指定する必要があります。

ドキュメントには、App.configを使用できるとも記載されています。

ただし、Xamarinで使用するため、他のオーバーロードの一部を使用する方がはるかに簡単です。それらの一部を次に示します。

enter image description here

クライアントを生成するためにAWSCredentialsを使用するとします。繰り返しますが、ここには多くのオプションがあります: enter image description here

注意:クライアントを初期化するときは、RegionEndpointを指定することをお勧めします。ほとんどの場合、忘れるとAmazonClientException: No RegionEndpoint or ServiceURL configuredが必要であることを思い出させます。

編集:あなたの質問の更新のため、ここに私からの更新があります:あなたが試した同じルールがそこの俳優に適用されます。 Xamarin.Formsアプリには存在しない構成ファイル内の資格情報を探しています。クライアントを使用するには、クライアントの資格情報を知る必要があります。クライアントを使用する必要がある場合は、初期化中にクライアントにいくつかの認証情報を提供します-他のAWSCredentialsのいくつかを使用します-BasicFederatedなど、または単純なものを使用して、accessKeyId + accessKeyを使用します。

あなたが試した、動作していない理由、または舞台裏で何をしているのかが気になる場合は、SDKがオープンソース化されています こちら 。空のctorのコードは here で、より興味深いFallbackCredentialsFactoryhere です。

1
Mihail Duchev