我目前正在关注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());
}
}
这将在指示的行上导致以下运行时错误:
找不到方法:无效的Amazon.S3.AmazonS3Client..ctor()
我了解MethodNotFoundException通常是旧版本的DLL徘徊,过时的依赖关系,重复的程序集等导致的,但是我是从一个全新的项目中进行部署的,唯一安装的软件包是up-最新的标准Xamarin软件包和Amazon.S3软件包。
什么引起此错误?
该问题与“旧dll,过时的依赖项”等无关。如果您查看下面的示例,他们不是在尝试调用默认ctor,而是通过桶区域。
如果查看Simple cross-platform application using the AWS SDK for .NET(甚至在使用的IDE内的文档中,您会发现使用默认ctor时,您需要:
[运行此应用程序之前,必须在[默认]配置文件或另一个配置文件中指定凭据,然后通过设置AWS_PROFILE环境变量来指定凭据。必须在[默认]配置文件中或通过设置AWS_REGION环境变量来指定区域。
文档还说可以使用App.config。
但是由于我们将其用于Xamarin,因此使用其他一些重载会容易得多。以下是其中一些:
假设您要使用AWSCredentials
来生成客户。同样,您在这里有很多选择:
注意:初始化客户端时,最好指定RegionEndpoint
。在大多数情况下,如果您忘记了,则会得到AmazonClientException: No RegionEndpoint or ServiceURL configured
,因此它会提醒您它是必需的。
编辑:由于您的问题的更新,以下是我的更新:您尝试过的规则也适用于那里的ctor。他们正在寻找Xamarin.Forms应用程序不存在的配置文件中的凭据。为了使用客户端,它需要知道其凭据。如果您需要使用客户端,则在初始化期间为它提供一些凭证-使用其他一些AWSCredentials-Basic
,Federated
等,或使用简单的一个-accessKeyId
+accessKey
。
[如果您好奇您尝试过的ctor为什么不起作用,或者他们在幕后正在做什么,那么他们的SDK是开源的here。空ctor的代码为here。