

 AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用这项服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

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

# 的.NET 教程 AWS Cloud9
<a name="sample-dotnetcore"></a>

本教程使你能够在 AWS Cloud9 开发环境中运行一些.NET 代码。

按照本教程并创建此示例可能会导致您的 AWS 账户被扣款。其中包括可能对 Amazon EC2 和 Amazon S3 等服务收取的费用。有关更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)和 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [

## 先决条件
](#sample-dotnetcore-prereqs)
+ [

## 步骤 1：安装所需工具
](#sample-dotnetcore-setup)
+ [

## 步骤 2（可选）：为 Lambda 函数安装 .NET CLI 扩展
](#sample-dotnetcore-lambda)
+ [

## 步骤 3：创建 .NET 控制台应用程序项目
](#sample-dotnetcore-app)
+ [

## 步骤 4：添加代码
](#sample-dotnetcore-code)
+ [

## 步骤 5：生成并运行代码
](#sample-dotnetcore-run)
+ [

## 步骤 6：创建和设置使用.NET 控制台应用程序项目 适用于 .NET 的 AWS SDK
](#sample-dotnetcore-sdk)
+ [

## 第 7 步：添加 AWS SDK 代码
](#sample-dotnetcore-sdk-code)
+ [

## 第 8 步：生成并运行 S AWS DK 代码
](#sample-dotnetcore-sdk-run)
+ [

## 步骤 9：清除
](#sample-dotnetcore-clean-up)

## 先决条件
<a name="sample-dotnetcore-prereqs"></a>

在使用此示例之前，请确保您的设置满足以下要求：
+ **您必须拥有现有 AWS Cloud9 的 EC2 开发环境。**本示例假设您已经有连接到运行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 实例的 EC2 环境。如果您有不同类型的环境或操作系统，可能需要按照本示例的说明来设置相关的工具。有关更多信息，请参阅 [在中创建环境 AWS Cloud9](create-environment.md)。
+ **您已经打开了现有环境的 AWS Cloud9 IDE。**打开环境时，会在 Web 浏览器中 AWS Cloud9 打开该环境的 IDE。有关更多信息，请参阅 [在中打开环境 AWS Cloud9](open-environment.md)。

## 步骤 1：安装所需工具
<a name="sample-dotnetcore-setup"></a>

在此步骤中，将运行此示例需要的 .NET 开发工具包安装到环境中。

1. 确认环境中是否已安装 .NET 开发工具包的最新版本。为此，请在 AWS Cloud9 IDE 的终端会话中运行带有**`--version`**选项的.NET Core 命令行接口 (CLI)。

   ```
   dotnet --version
   ```

   如果显示 .NET 命令行工具版本并且版本为 2.0 或更高版本，请向前跳至 [步骤 3：创建 .NET 控制台应用程序项目](#sample-dotnetcore-app)。如果版本低于 2.0 或显示 `bash: dotnet: command not found` 等错误，请继续安装 .NET 开发工具包。

1. 对于 Amazon Linux，在 AWS Cloud9 IDE 的终端会话中，运行以下命令以帮助确保安装了最新的安全更新和错误修复，并安装.NET SDK 所需的`libunwind`软件包。（要开始新的终端会话，请在菜单栏上依次选择 **Window (窗口)、New Terminal (新建终端)**。）

   ```
   sudo yum -y update
   sudo yum -y install libunwind
   ```

   对于 Ubuntu Server，在 AWS Cloud9 IDE 的终端会话中，运行以下命令以帮助确保安装了最新的安全更新和错误修复。（要开始新的终端会话，请在菜单栏上依次选择 **Window (窗口)、New Terminal (新建终端)**。）

   ```
   sudo apt -y update
   ```

1. 通过运行以下命令，将 .NET 开发工具包安装程序脚本下载到环境中。

   ```
   wget https://dot.net/v1/dotnet-install.sh
   ```

1. 通过运行以下命令，使安装程序脚本可由当前用户执行。

   ```
   sudo chmod u=rx dotnet-install.sh
   ```

1. 通过运行以下命令，运行安装程序脚本，该脚本将下载并安装 .NET 开发工具包。

   ```
   ./dotnet-install.sh -c Current
   ```

1. 将 .NET 开发工具包添加到 `PATH`。为此，在环境的 shell 配置文件（例如，`.bashrc` 文件）中，将 `$HOME/.dotnet` 子目录添加到环境的 `PATH` 变量，如下所示。

   1. 使用 `.bashrc`**`vi` 命令打开 ** 文件以供编辑。

      ```
      vi ~/.bashrc
      ```

   1. 对于 Amazon Linux，使用向下键或 `j` 键，移至以 `export PATH` 开头的行。

      对于 Ubuntu Server，通过键入 `G` 移动至文件最后一行。

   1. 使用向右键或 `$` 键移至行尾。

   1. 通过按 `i` 键切换到插入模式。（`-- INSERT ---` 将出现在显示内容的末尾。）

   1. 对于 Amazon Linux，通过键入 `:$HOME/.dotnet` 将 `$HOME/.dotnet` 子目录添加至 **`PATH`** 变量。请务必包含冒号字符 (`:`)。现在，行应类似于以下内容。

      ```
      export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/.dotnet
      ```

      对于 Ubuntu Server，请按向右箭头键，然后按 `Enter` 两次，然后在文件末尾单独输入以下代码行。

      ```
      export PATH=$HOME/.dotnet:$PATH
      ```

   1. 保存该文件。要执行此操作，请按 `Esc` 键（`-- INSERT ---` 将从显示内容的末尾消失），键入 `:wq`（以写入然后退出文件），然后按 `Enter`。

1. 通过提供 `.bashrc` 文件源来加载 .NET 开发工具包。

   ```
   . ~/.bashrc
   ```

1. 通过运行带 **`--help`** 选项的 .NET CLI 确认已加载 .NET 开发工具包。

   ```
   dotnet --help
   ```

   如果成功，则显示 .NET 开发工具包版本号，以及附加的使用信息。

1. 如果不想再在环境中保留 .NET 开发工具包安装程序脚本，则可按如下所述将其删除。

   ```
   rm dotnet-install.sh
   ```

## 步骤 2（可选）：为 Lambda 函数安装 .NET CLI 扩展
<a name="sample-dotnetcore-lambda"></a>

尽管本教程不是必需的，但如果您还安装了`Amazon.Lambda.Tools`软件包，则可以使用.NET CLI 部署 AWS Lambda 函数和 AWS Serverless Application Model 应用程序。

1. 要安装此程序包，请运行以下命令：

   ```
   dotnet tool install -g Amazon.Lambda.Tools
   ```

1. 现在设置 `PATH` 和 `DOTNET_ROOT` 环境变量，以指向已安装的 Lambda 工具。在 `.bashrc` 文件，查找 `export PATH` 部分，然后对其进行编辑，使其类似于以下内容（有关编辑此文件的详细信息，请参阅步骤 1）：

   ```
   export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/.dotnet:$HOME/.dotnet/tools
   export DOTNET_ROOT=$HOME/.dotnet
   ```

## 步骤 3：创建 .NET 控制台应用程序项目
<a name="sample-dotnetcore-app"></a>

在此步骤中，将使用 .NET 创建一个名为 `hello` 的项目。此项目包含 .NET 在 IDE 中从终端运行简单应用程序所需的全部文件。该应用程序的代码是用 C\$1 编写的。

创建 .NET 控制台应用程序项目。要执行此操作，请用 **`new`** 命令运行 .NET CLI，并指定要使用的控制台应用程序项目模板类型和编程语言（在本示例中为 C\$1）。

 `-n` 选项表示将项目输出到新目录，`hello`。然后，导航到该目录。

```
dotnet new console -lang C# -n hello
cd hello
```

前面的命令会将一个名为 `obj` 且包含几个文件的子目录以及一些附加的独立文件添加至 `hello` 目录。您应注意以下两个关键文件：
+ `hello/hello.csproj` 文件包含有关控制台应用程序项目的信息。
+ `hello/Program.cs` 文件包含要运行的应用程序代码。

## 步骤 4：添加代码
<a name="sample-dotnetcore-code"></a>

在此步骤中，您将向应用程序中添加一些代码。

在 AWS Cloud9 IDE 的 “**环境**” 窗口中，打开该`hello/Program.cs`文件。

在编辑器中，将该文件的当前内容替换为以下代码，然后保存 `Program.cs` 文件。

```
using System;

namespace hello
{
  class Program
  {
    static void Main(string[] args)
    {
     if (args.Length < 2) {
       Console.WriteLine("Please provide 2 numbers");
       return;
     }

     Console.WriteLine("Hello, World!");

     Console.WriteLine("The sum of 2 and 3 is 5.");

     int sum = Int32.Parse(args[0]) + Int32.Parse(args[1]);

     Console.WriteLine("The sum of {0} and {1} is {2}.",
     args[0], args[1], sum);

    }
  }
}
```

## 步骤 5：生成并运行代码
<a name="sample-dotnetcore-run"></a>

在此步骤中，您会将该项目及其依赖项生成为一组二进制文件，包括一个可运行的应用程序文件。然后运行该应用程序。

1. 在 IDE 中，为 .NET 创建一个生成器，如下所示。

   1. 在菜单栏中，依次选择 **Run (运行)、Build System (生成系统) 和 New Build System (新建生成系统)**。

   1. 在 **My Builder.build (我的 Builder.build)** 选项卡上，将选项卡的内容替换为以下代码。

      ```
      {
        "cmd" : ["dotnet", "build"],
        "info" : "Building..."
      }
      ```

   1. 依次选择 **File（文件）、Save As（另存为）**。

   1. 对于 **Filename (文件名)**，键入 `.NET.build`。

   1. 对于 **Folder (文件夹)**，键入 `/.c9/builders`。

   1. 选择**保存**。

1. 编辑器中显示 `Program.cs` 文件的内容后，依次选择 **运行、生成系统和 .NET **。然后依次选择 **Run (运行)、Build (生成)**。

   此生成器将向 `hello/obj` 子目录中添加一个名为 `bin` 的子目录和一个名为 `Debug` 的子目录。请注意以下三个关键文件。
   + `hello/bin/Debug/netcoreapp3.1/hello.dll` 文件是可运行的应用程序文件。
   + `hello/bin/Debug/netcoreapp3.1/hello.deps.json` 文件列出了应用程序的依赖项。
   + `hello/bin/Debug/netcoreapp3.1/hello.runtimeconfig.json` 文件为应用程序指定共享的运行时及其版本。
**注意**  
文件夹名称 `netcoreapp3.1`，反映了本示例中使用的 .NET 开发工具包的版本。根据您安装的版本，您可能会在文件夹名称中看到不同的编号。

1. 为 .NET 创建一个运行程序，如下所示。

   1. 在菜单栏上，依次选择 **Run (运行)、Run With (运行方式) 和 New Runner (新建运行程序)**。

   1. 在 **My Runner.run (我的 Runner.run)** 选项卡上，将该选项卡的内容替换为以下代码。

      ```
      {
        "cmd" : ["dotnet", "run", "$args"],
        "working_dir": "$file_path",
        "info" : "Running..."
      }
      ```

   1. 依次选择 **File（文件）、Save As（另存为）**。

   1. 对于 **Filename (文件名)**，键入 `.NET.run`。

   1. 对于 **Folder (文件夹)**，键入 `/.c9/runners`。

   1. 选择**保存**。

1. 运行应用程序，将两个整数相加（例如，`5` 和 `9`），如下所示。

   1. 当编辑器中显示 `Program.cs` 文件的内容时，依次选择 **Run (运行)、Run Configurations (运行配置) 和 New Run Configuration (新建运行配置)**。

   1. 在 **[新建] - 空闲** 选项卡中，选择**运行程序: 自动**，然后选择 **.NET **。

   1. 在 **Command (命令)** 框中，键入 `hello 5 9`。

   1. 选择**运行**。

      默认情况下，此运行程序将指示 .NET 运行 `hello.dll` 目录中的 `hello/bin/Debug/netcoreapp3.1` 文件。

      将输出与以下内容进行比较。

      ```
      Hello, World!
      The sum of 2 and 3 is 5.
      The sum of 5 and 9 is 14.
      ```

## 步骤 6：创建和设置使用.NET 控制台应用程序项目 适用于 .NET 的 AWS SDK
<a name="sample-dotnetcore-sdk"></a>

您可以增强此示例，使用创建 Amazon S3 存储桶，列出您的可用存储桶，然后删除您刚刚创建的存储桶。 适用于 .NET 的 AWS SDK 

在此新项目中，您将添加对 适用于 .NET 的 AWS SDK的引用。 适用于 .NET 的 AWS SDK 提供了一种通过.NET 代码与 Amazon S3 等 AWS 服务进行交互的便捷方式。然后，您可以在自己的环境中设置 AWS 凭证管理。 适用于 .NET 的 AWS SDK 需要这些凭据才能与 AWS 服务进行交互。

### 创建 项目
<a name="sample-dotnetcore-sdk-create"></a>

1. 创建 .NET 控制台应用程序项目。要执行此操作，请用 **`new`** 命令运行 .NET CLI，并指定要使用的控制台应用程序项目模板类型和编程语言。

   `-n` 选项表示将项目输出到新目录，`s3`。然后，导航到该目录。

   ```
   dotnet new console -lang C# -n s3
   cd s3
   ```

1. 在 适用于 .NET 的 AWS SDK中添加对 Amazon S3 程序包的项目引用。为此，请使用**`add package`**命令运行.NET CLI，并在中指定 Amazon S3 软件包的名称 NuGet。 （NuGet定义如何创建、托管和使用.NET 软件包，并为每个角色提供工具。）

   ```
   dotnet add package AWSSDK.S3
   ```

   向 Amazon S3 包添加项目引用时， NuGet 还会向其余部分添加项目引用 适用于 .NET 的 AWS SDK。
**注意**  
有关中其他 AWS 相关软件包的名称和版本 NuGet，请参阅网站上[标有 aws-sdk 的NuGet NuGet 软件包](https://www.nuget.org/packages?q=Tags%3A%22aws-sdk%22)。

### 设置 AWS 凭据管理
<a name="sample-dotnetcore-sdk-creds"></a>

每次使用调 适用于 .NET 的 AWS SDK 用 AWS 服务时，都必须为呼叫提供一组 AWS 凭据。这些证书决定了是否 适用于 .NET 的 AWS SDK 具有进行该呼叫的相应权限。如果凭证没有包括合适的权限，调用将失败。

要在环境中存储凭证，请按照 [AWS 服务 从中的环境中呼叫 AWS Cloud9](credentials.md) 中的说明进行操作，然后返回到该主题。

有关更多信息，请参阅《*适用于 .NET 的 AWS SDK 开发人员指南》*中的[配置 AWS 凭证](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-creds.html)。

## 第 7 步：添加 AWS SDK 代码
<a name="sample-dotnetcore-sdk-code"></a>

在此步骤中，您添加用于与 Amazon S3 交互的代码，以用于创建存储桶、删除刚刚创建的存储桶，然后列出可用的存储桶。

在 AWS Cloud9 IDE 的 “**环境**” 窗口中，打开该`s3/Program.cs`文件。在编辑器中，将该文件的当前内容替换为以下代码，然后保存 `Program.cs` 文件。

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Util;
using System;
using System.Threading.Tasks;
     
namespace s3
{
  class Program
  {
   async static Task Main(string[] args)
   {
    if (args.Length < 2) {
      Console.WriteLine("Usage: <the bucket name> <the AWS Region to use>");
      Console.WriteLine("Example: my-test-bucket us-east-2");
      return;
    }
     
    if (args[1] != "us-east-2") {
      Console.WriteLine("Cannot continue. The only supported AWS Region ID is " +
      "'us-east-2'.");
       return;
     }
         
      var bucketRegion = RegionEndpoint.USEast2;
      // Note: You could add more valid AWS Regions above as needed.
     
      using (var s3Client = new AmazonS3Client(bucketRegion)) {
      var bucketName = args[0];
        
      // Create the bucket.
      try
      {
       if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
       {
         Console.WriteLine("Cannot continue. Cannot create bucket. \n" +
         "A bucket named '{0}' already exists.", bucketName);
         return;
       } else {
         Console.WriteLine("\nCreating the bucket named '{0}'...", bucketName);
         await s3Client.PutBucketAsync(bucketName);
         }
       }
       catch (AmazonS3Exception e)
       {
        Console.WriteLine("Cannot continue. {0}", e.Message);
       }
       catch (Exception e)
       {
        Console.WriteLine("Cannot continue. {0}", e.Message);
       }
        
       // Confirm that the bucket was created.
       if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
       {
          Console.WriteLine("Created the bucket named '{0}'.", bucketName);
       } else {
         Console.WriteLine("Did not create the bucket named '{0}'.", bucketName);
       }
        
       // Delete the bucket.
       Console.WriteLine("\nDeleting the bucket named '{0}'...", bucketName);
       await s3Client.DeleteBucketAsync(bucketName);
        
       // Confirm that the bucket was deleted.
       if (await AmazonS3Util.DoesS3BucketExistV2Async(s3Client, bucketName))
       {
          Console.WriteLine("Did not delete the bucket named '{0}'.", bucketName);
       } else {
         Console.WriteLine("Deleted the bucket named '{0}'.", bucketName);
       };
        
        // List current buckets.
       Console.WriteLine("\nMy buckets now are:");
       var response = await s3Client.ListBucketsAsync();
        
       foreach (var bucket in response.Buckets)
       {
       Console.WriteLine(bucket.BucketName);
       }
      }
    }
  }
}
```

## 第 8 步：生成并运行 S AWS DK 代码
<a name="sample-dotnetcore-sdk-run"></a>

在此步骤中，您会将该项目及其依赖项生成为一组二进制文件，包括一个可运行的应用程序文件。然后运行该应用程序。

1. 构建项目。要执行此操作，在编辑器中显示 `s3/Program.cs` 文件的内容后，请在菜单栏上依次选择 **Run (运行)、Build (生成)**。

1. 用要创建的 Amazon S3 存储桶的名称和要在其中创建存储桶的 AWS 区域的 ID（例如，`my-test-bucket` 和 `us-east-2`）运行应用程序，如下所示。

   1. 当编辑器中仍显示 `s3/Program.cs` 文件的内容时，依次选择 **Run (运行)、Run Configurations (运行配置)、New Run Configuration (新建运行配置)**。

   1. 在 **[新建] - 空闲** 选项卡中，选择**运行程序: 自动**，然后选择 **.NET **。

   1. 在**命令**框中，键入应用程序的名称、要创建的 Amazon S3 存储桶的名称以及要在其中创建存储桶的 AWS 区域 ID（例如`s3 my-test-bucket us-east-2`）。

   1. 选择**运行**。

      默认情况下，此运行程序将指示 .NET 运行 `s3.dll` 目录中的 `s3/bin/Debug/netcoreapp3.1` 文件。

      将结果与以下输出进行比较。

      ```
      Creating a new bucket named 'my-test-bucket'...
      Created the bucket named 'my-test-bucket'.
      
      Deleting the bucket named 'my-test-bucket'...
      Deleted the bucket named 'my-test-bucket'.
      
      My buckets now are:
      ```

## 步骤 9：清除
<a name="sample-dotnetcore-clean-up"></a>

为了防止在您使用完此示例后继续向您的 AWS 账户收费，您应该删除该环境。有关说明，请参阅[删除中的环境 AWS Cloud9](delete-environment.md)。