

 适用于 .NET 的 AWS SDK V3 已进入维护模式。

我们建议您迁移到 [适用于 .NET 的 AWS SDK V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html)。有关如何迁移的更多详细信息和信息，请参阅我们的[维护模式公告](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 迁移到适用于 .NET 的 AWS SDK 3.5 版
<a name="net-dg-v35"></a>

适用于 .NET 的 AWS SDK的版本 3.5 通过将对所有开发工具包的非 Framework 变体的支持转换为 [.NET Standard 2.0](https://docs.microsoft.com/en-us/dotnet/standard/net-standard)，进一步标准化了 .NET 体验。根据您的环境和代码库，要利用 3.5 版功能，您可能需要执行某些迁移工作。

本主题介绍版本 3.5 中的更改以及从版本 3 迁移环境或代码可能需要执行的工作。

## 3.5 版的更改内容
<a name="net-dg-v35-changes"></a>

以下内容介绍适用于 .NET 的 AWS SDK版本 3.5 中已更改或尚未更改的内容。

### .NET Framework 和 .NET Core
<a name="net-dg-v35-changes-dotnet"></a>

对 .NET Framework 和 .NET Core 的支持没有更改。

### Xamarin
<a name="net-dg-v35-changes-xamarin"></a>

（新的和现有的）Xamarin 项目必须指向 .NET Standard 2.0。请参阅 [Xamarin.Forms 中的 .NET Standard 2.0 支持](https://docs.microsoft.com/en-us/xamarin/xamarin-forms/internals/net-standard)和 [.NET 实现支持](https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support)。

### Unity
<a name="net-dg-v35-changes-unity"></a>

Unity 应用程序必须使用 Unity 2018.1 或更高版本指向 .NET Standard 2.0 或 .NET 4.x 配置文件。有关更多信息，请参阅 [.NET 配置文件支持](https://docs.unity3d.com/2020.1/Documentation/Manual/dotnetProfileSupport.html)。此外，如果您使用 **IL2CPP** 来构建，则必须通过添加 *link.xml* 文件来禁用代码剥离，如[从 Unity、Xamarin 或 UWP 中引用适用于 .NET 的 AWS SDK（Standard 2.0）](https://aws.amazon.com/blogs/developer/referencing-the-aws-sdk-for-net-standard-2-0-from-unity-xamarin-or-uwp)中所述。将代码移植到推荐的代码库之一后，Unity 应用程序可以访问开发工具包提供的所有服务。

由于 Unity 支持 .NET Standard 2.0，因此开发工具包版本 3.5 的 **AWSSDk.core** 程序包不再具有 Unity 特定的代码，包括一些更高级别的功能。为了提供更好的转换，所有 ***legacy*** 的 Unity 代码都可以在 [aws/aws-sdk-unity-net](https://github.com/aws/aws-sdk-unity-net) GitHub 存储库中供参考。如果您发现缺少影响将 AWS 与 Unity 结合使用的功能，您可以通过 [https://github.com/aws/dotnet/issues](https://github.com/aws/dotnet/issues) 提交功能请求。

另请参阅[Unity 支持的特殊注意事项](unity-special.md)。

### 通用 Windows 平台 (UWP)
<a name="net-dg-v35-changes-uwp"></a>

将您的 UWP 应用程序指向[版本 16299 或更高版本](https://docs.microsoft.com/en-us/windows/uwp/updates-and-versions/choose-a-uwp-version)（秋季创建者更新，版本 1709，2017 年 10 月发布）。

### Windows Phone 和 Silverlight
<a name="net-dg-v35-changes-phone-silverlight"></a>

适用于 .NET 的 AWS SDK的版本 3.5 不支持这些平台，因为 Microsoft 不再积极开发它们。有关更多信息，请参阅下列内容：
+ [Windows 10 Mobile 终止支持](https://support.microsoft.com/en-us/help/4485197/windows-10-mobile-end-of-support-faq)
+ [Silverlight 终止支持](https://support.microsoft.com/en-us/help/4511036/silverlight-end-of-support)

### 传统的便携式类库（基于配置文件的 PCL）
<a name="net-dg-v35-changes-pcl"></a>

考虑将您的库重定向到 .NET 标准。有关更多信息，请参阅 Microsoft 提供的[可移植类库的比较](https://docs.microsoft.com/en-us/dotnet/standard/net-standard#comparison-to-portable-class-libraries)。

### Amazon Cognito Sync Manager 和 Amazon Mobile Analytics Manager
<a name="net-dg-v35-changes-cog-ma"></a>

适用于 .NET 的 AWS SDK 3.5 版中删除了便于使用 Amazon Cognito Sync 和 Amazon Mobile Analytics 的高级抽象。 AWS AppSync是 Amazon Cognito Sync 的首选替代品。Amazon Pinpoint 是 Amazon Mobile Analytics 的首选替代品。

如果您的代码受到缺乏 AWS AppSync 和 Amazon Pinpoint 的更高级别库代码的影响，您可以记录您对以下 GitHub 问题之一或这两个问题的兴趣：[https://github.com/aws/dotnet/issues/20](https://github.com/aws/dotnet/issues/20) 和 [https://github.com/aws/dotnet/issues/19](https://github.com/aws/dotnet/issues/19).。您还可以从以下 GitHub 存储库获取 Amazon Cognito Sync Manager 和 Amazon Mobile Analytics Manager 的库：[aws/amazon-cognito-sync-manager-net](https://github.com/aws/amazon-cognito-sync-manager-net) 和 [aws/aws-mobile-analytics-manager-net](https://github.com/aws/aws-mobile-analytics-manager-net)。

## 迁移同步代码
<a name="net-dg-v35-migrate-code"></a>

适用于 .NET 的 AWS SDK 3.5 版同时支持 .NET Framework 和 .NET Standard（通过 .NET Core 3.1、.NET 5 等 .NET Core 版本）。符合 .NET Standard 的开发工具包版本仅提供异步方法，因此，如果您想利用 .NET Standard，则必须更改同步代码以使其异步运行。

以下代码片段展示如何将同步代码更改为异步代码。这些代码片段中的代码用于显示 Amazon S3 桶的数量。

原始代码调用 [ListBuckets](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/MS3ListBuckets.html)。

```
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](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/MS3ListBucketsAsyncCancellationToken.html) 。

```
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}");
```