Метод не найден: void Amazon.S3.AmazonS3Client..ctor () | AmazonS3 с. NET / Xamarin - PullRequest
6 голосов
/ 28 мая 2020

В настоящее время я слежу за документацией Amazon AWSSDK (в частности, : это ), пытаясь получить доступ к данным AmazonS3 в приложении форм Xamarin. Я столкнулся с ошибкой, поэтому я начал проект fre sh с пакетами fre sh, все они обновлены, насколько я могу судить, и все еще сталкиваюсь с той же проблемой.

Вот текущий код для основного кода класса:

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());

    }
}

Это приводит к следующей ошибке времени выполнения в указанной строке:

Метод не найден: void Amazon.S3.AmazonS3Client..ctor ()

Я понимаю, что MethodNotFoundException часто являются результатом зависания старых версий DLL, устаревших зависимостей, дублирующихся сборок и т. Д. c, но я развернул это из совершенно бесплатного проекта sh с единственными установленными пакетами, являющимися современными стандартными пакетами Xamarin и пакетом Amazon.S3.

Что вызывает эту ошибку?

1 Ответ

1 голос
/ 30 мая 2020

Проблема не имеет ничего общего со «старыми dll, устаревшими зависимостями» и т. Д. c. Если вы посмотрите на пример, которому следуете, они не пытаются вызвать ctor по умолчанию, а вместо этого инициализируют его через область ведра .

Если вы посмотрите на Простое кроссплатформенное приложение, использующее AWS SDK для. NET (или даже в документации внутри IDE, которую вы используете), вы можете видеть, что когда используется ctor по умолчанию, вы необходимо:

Перед запуском этого приложения учетные данные должны быть указаны либо в профиле [по умолчанию], либо в другом профиле, а затем путем установки переменной среды AWS_PROFILE. Регион должен быть указан либо в профиле [по умолчанию], либо путем установки переменной среды AWS_REGION.

В документации также говорится, что можно использовать App.config.

Но поскольку мы будем использовать его для Xamarin, будет намного проще использовать некоторые другие перегрузки. Вот некоторые из них:

enter image description here

Допустим, вы хотите использовать AWSCredentials для создания своего клиента. Опять же, у вас есть много вариантов: enter image description here

NB: при инициализации клиента рекомендуется указывать RegionEndpoint. В большинстве случаев, если вы забудете, вы получите AmazonClientException: No RegionEndpoint or ServiceURL configured, так что он будет напоминать вам, что это необходимо.

Изменить: из-за обновления в вашем вопросе, вот обновление от меня: те же правила применяются для там ctors, с которыми вы пробовали. Они ищут учетные данные в файлах конфигурации, которых нет в приложении Xamarin.Forms. Чтобы использовать клиент, он должен знать свои учетные данные. Если вам нужно использовать клиент, то укажите ему некоторые учетные данные во время инициализации - используйте либо другие AWSCredentials - Basic, Federated, et c, либо простой - с accessKeyId + accessKey.

Если вам интересно, почему ctors, которые вы пробовали, не работают, или что они делают за кулисами, их SDK находится в открытом доступе здесь . Пустой код ctor здесь и более интересный FallbackCredentialsFactory здесь .

...