找不到方法:void Amazon.S3.AmazonS3Client..ctor() | 带有 .NET / Xamarin 的 AmazonS3

Nat*_*yea 6 c# amazon-s3 amazon-web-services xamarin aws-sdk

我目前正在关注 Amazon 的 AWSSDK 文档(特别是:this)以尝试访问 Xamarin 表单应用程序上的 AmazonS3 数据。我遇到了一个错误,所以我用新的包开始了一个新项目,据我所知都是最新的,但仍然遇到同样的问题。

这是类背后的主要代码的当前代码:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

这会导致在指示的行上出现以下运行时错误:

找不到方法:void Amazon.S3.AmazonS3Client..ctor()

我知道MethodNotFoundException s 通常是旧版本的 DLL 闲置、过时的依赖项、重复的程序集等的结果,但我已经从一个全新的项目中部署了它,安装的唯一包是最新的标准 Xamarin 包和 Amazon.S3 包。

是什么导致了这个错误?

Mih*_*hev 1

这个问题与“旧的 dll、过时的依赖项”等无关。如果您查看下面的示例,它们不会尝试调用默认 ctor,而是通过存储桶区域对其进行初始化

如果您查看使用适用于 .NET 的 AWS 开发工具包的简单跨平台应用程序(或者甚至在您正在使用的 IDE 内的文档中),您可以看到,当使用默认构造函数时,您需要:

在运行此应用程序之前,必须在 [default] 配置文件或另一个配置文件中指定凭证,然后设置 AWS_PROFILE 环境变量。必须在 [default] 配置文件中或通过设置 AWS_REGION 环境变量来指定区域。

文档还说可以使用 App.config。

但由于我们将在 Xamarin 中使用它,因此使用其他一些重载会容易得多。这里是其中的一些:

在此输入图像描述

假设您想使用它AWSCredentials来生成您的客户端。同样,您在这里有很多选择: 在此输入图像描述

注意:当您初始化客户端时,最好指定RegionEndpoint. 在大多数情况下,如果您忘记了,您会得到一个,AmazonClientException: No RegionEndpoint or ServiceURL configured因此它会提醒您这是必需的。

编辑:由于您问题的更新,这是我的更新:相同的规则适用于您尝试过的演员。他们正在配置文件中查找 Xamarin.Forms 应用程序中不存在的凭据。为了使用客户端,它需要知道其凭据。如果您需要使用客户端,则在初始化期间为其提供一些凭证 - 使用其他一些 AWSCredentials - BasicFederated等,或使用简单的凭证 - 带accessKeyId+ accessKey

如果您好奇为什么您尝试过的 ctors 不起作用,或者他们在幕后做了什么,他们的 SDK 在这里开源。空ctor的代码在这里,更有趣的是FallbackCredentialsFactory 这里