【问题标题】:Method not found: void Amazon.S3.AmazonS3Client..ctor() | AmazonS3 w/ .NET / Xamarin找不到方法:无效 Amazon.S3.AmazonS3Client..ctor() | AmazonS3 w/.NET/Xamarin
【发布时间】:2020-09-15 03:18:40
【问题描述】:

我目前正在关注 Amazon 的 AWSSDK 文档 (in particular: 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());

    }
}

这会导致指示行出现以下 runtime 错误:

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

我了解 MethodNotFoundException 通常是由于旧版本的 DLL、过时的依赖项、重复的程序集等造成的,但我是从一个全新的项目中部署的,只安装了包是最新的标准 Xamarin 包和 Amazon.S3 包。

是什么导致了这个错误?

【问题讨论】:

  • 嗨,欢迎来到 SO!如果将 AmazonS3 版本降级到以前的版本,它是否可以工作?
  • 谢谢!这个我试过了,是的,错误一直存在。
  • 您使用的是什么版本的 AWS 开发工具包?我建议 Xamarin 使用 3.5 beta 版本。 3.5 的主要目标是将 Xamarin 支持切换到 SDK 的 .NET Standard 2.0 版本。这减少了获得不匹配的 AWSSDK.Core 组件的一些问题。
  • 我不确定您指的是哪个版本的 AWS SDK,因为我使用的 AWSSDK.S3 的可用版本仅达到 v3.3.111.4 和 AWSSDK。包管理器中列出的核心显示 v3.3.107.3 为其最新版本

标签: c# amazon-web-services xamarin amazon-s3 aws-sdk


【解决方案1】:

该问题与“旧 dll、过时的依赖项”等无关。如果您查看您正在遵循的示例,他们并没有尝试调用默认 ctor,而是通过 桶区域。

如果您查看Simple cross-platform application using the AWS SDK for .NET(甚至在您正在使用的 IDE 内的文档中),您可以看到在使用默认 ctor 时,您需要:

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

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

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

假设您想使用AWSCredentials 来生成您的客户端。同样,您在这里有很多选择:

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

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

如果您想知道为什么您尝试过的 ctor 不起作用,或者他们在幕后做什么,他们的 SDK 是开源的 here。空ctor的代码是here,更有趣的是FallbackCredentialsFactoryhere

【讨论】:

  • 感谢您的回复。我看到您在使用 AWSCredentials 初始化客户端时会出现关于缺少指定 RegionEndpoint 的错误。但是,正如我之前应该提到的,在尝试使用 RegionEndpoint 初始化客户端时,我遇到了与我的问题中提到的相同的错误。我已经编辑了我的问题以反映这一点。
猜你喜欢
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多