本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
迁移到Amazon SDK for .NET 3.5 版
Amazon SDK for .NET的版本 3.5 通过将对所有开发工具包的非 Framework 变体的支持转换为 .NET Standard 2.0
本主题介绍版本 3.5 中的更改以及从版本 3 迁移环境或代码可能需要执行的工作。
3.5 版的更改内容
以下内容介绍Amazon SDK for .NET版本 3.5 中已更改或尚未更改的内容。
.NET Framework 和 .NET Core
对 .NET Framework 和 .NET Core 的支持没有更改。
Xamarin
(新的和现有的)Xamarin 项目必须指向 .NET Standard 2.0。请参阅 Xamarin.Forms 中的 .NET Standard 2.0 支持
Unity
Unity 应用程序必须使用 Unity 2018.1 或更高版本指向 .NET Standard 2.0 或 .NET 4.x 配置文件。有关更多信息,请参阅 .NET 配置文件支持
由于 Unity 支持 .NET Standard 2.0,因此开发工具包版本 3.5 的 AWSSDk.core 程序包不再具有 Unity 特定的代码,包括一些更高级别的功能。为了提供更好的转换,所有 legacy 的 Unity 代码都可以在 aws/aws-sdk-unity-net
另请参阅Unity 支持的特殊注意事项。
通用 Windows 平台 (UWP)
将您的 UWP 应用程序指向版本 16299 或更高版本
Windows Phone 和 Silverlight
Amazon SDK for .NET的版本 3.5 不支持这些平台,因为 Microsoft 不再积极开发它们。有关更多信息,请参阅下列内容:
传统的便携式类库(基于配置文件的 PCL)
考虑将您的库重定向到 .NET 标准。有关更多信息,请参阅 Microsoft 提供的可移植类库的比较
Amazon Cognito Sync Manager 和 Amazon Mobile Analytics Manager
Amazon SDK for .NET 3.5 版中删除了便于使用 Amazon Cognito Sync 和 Amazon Mobile Analytics 的高级抽象。 Amazon AppSync是 Amazon Cognito Sync 的首选替代品。Amazon Pinpoint 是 Amazon Mobile Analytics 的首选替代品。
如果您的代码受到缺乏 Amazon AppSync 和 Amazon Pinpoint 的更高级别库代码的影响,您可以记录您对以下 GitHub 问题之一或这两个问题的兴趣:https://github.com/aws/dotnet/issues/20
迁移同步代码
Amazon SDK for .NET 3.5 版同时支持 .NET Framework 和 .NET Standard(通过 .NET Core 3.1、.NET 5 等 .NET Core 版本)。符合 .NET Standard 的开发工具包版本仅提供异步方法,因此,如果您想利用 .NET Standard,则必须更改同步代码以使其异步运行。
以下代码片段展示如何将同步代码更改为异步代码。这些代码片段中的代码用于显示 Amazon S3 桶的数量。
原始代码调用 ListBuckets。
private static ListBucketsResponse MyListBuckets() { var s3Client = new AmazonS3Client(); var response = s3Client.ListBuckets(); return response; } // From the calling function ListBucketsResponse response = MyListBuckets(); Console.WriteLine($"Number of buckets: {response.Buckets.Count}");
要使用此开发工具包的 3.5 版本,请改为调用 ListBucketsAsync 。
private static async Task<ListBucketsResponse> MyListBuckets() { var s3Client = new AmazonS3Client(); var response = await s3Client.ListBucketsAsync(); return response; } // From an **asynchronous** calling function ListBucketsResponse response = await MyListBuckets(); Console.WriteLine($"Number of buckets: {response.Buckets.Count}"); // OR From a **synchronous** calling function Task<ListBucketsResponse> response = MyListBuckets(); Console.WriteLine($"Number of buckets: {response.Result.Buckets.Count}");