

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 gewartet und der Support wurde am 1. Juni 2023 eingestellt.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Arbeiten mit dem AWS CDK in C\$1
<a name="work-with-cdk-csharp"></a>

.NET ist eine vollständig unterstützte Client-Sprache für das AWS CDK und gilt als stabil. C\$1 ist die wichtigste .NET-Sprache, für die wir Beispiele und Support bereitstellen. Sie können wählen, ob Sie AWS CDK-Anwendungen in anderen .NET-Sprachen wie Visual Basic oder F\$1 schreiben möchten. Die Verwendung dieser Sprachen mit dem CDK wird jedoch AWS nur eingeschränkt unterstützt.

Sie können AWS CDK-Anwendungen in C\$1 mit vertrauten Tools wie Visual Studio, Visual Studio Code, dem `dotnet` Befehl und dem Paketmanager entwickeln. NuGet [Die Module, aus denen die AWS Construct-Bibliothek besteht, werden über nuget.org vertrieben.](https://www.nuget.org/packages?q=amazon.cdk.aws)

Wir empfehlen, [Visual Studio 2019](https://visualstudio.microsoft.com/downloads/) (jede Edition) unter Windows zu verwenden, um AWS CDK-Apps in C\$1 zu entwickeln.

## Fangen Sie mit C\$1 an
<a name="csharp-prerequisites"></a>

Um mit dem AWS CDK arbeiten zu können, benötigen Sie ein AWS Konto und Anmeldeinformationen und müssen Node.js und das AWS CDK Toolkit installiert haben. Siehe [Erste Schritte mit dem CDK](getting-started.md). AWS 

 AWS [C\$1-CDK-Anwendungen erfordern .NET 8.0 oder höher, verfügbar hier.](https://dotnet.microsoft.com/en-us/download/dotnet)

**Anmerkung**  
Veraltete Sprachversion von Drittanbietern: Die Sprachversion wird nur unterstützt, bis ihr EOL (End Of Life) vom Anbieter oder der Community bekannt gegeben wird, und kann sich mit vorheriger Ankündigung ändern.

Die.NET-Toolchain umfasst `dotnet` ein Befehlszeilentool zum Erstellen und Ausführen von .NET-Anwendungen und zum Verwalten von Paketen. NuGet Auch wenn Sie hauptsächlich in Visual Studio arbeiten, kann dieser Befehl für Batchoperationen und für die Installation von AWS Construct Library-Paketen nützlich sein.

## Erstellen eines Projekts
<a name="csharp-newproject"></a>

Sie erstellen ein neues AWS CDK-Projekt, indem Sie es `cdk init` in einem leeren Verzeichnis aufrufen. Verwenden Sie die `--language` Option und geben Sie an: `csharp`

```
mkdir my-project
cd my-project
cdk init app --language csharp
```

 `cdk init`verwendet den Namen des Projektordners, um verschiedene Elemente des Projekts zu benennen, einschließlich Klassen, Unterordnern und Dateien. Bindestriche im Ordnernamen werden in Unterstriche umgewandelt. Ansonsten sollte der Name jedoch die Form eines C\$1-Bezeichners haben; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.

Das resultierende Projekt enthält einen Verweis auf das `Amazon.CDK.Lib` NuGet Paket. Es und seine Abhängigkeiten werden automatisch von installiert NuGet.

## Verwaltung von AWS Construct Library-Modulen
<a name="csharp-managemodules"></a>

Das.NET-Ökosystem verwendet den NuGet Paketmanager. Das CDK-Hauptpaket, das die Kernklassen und alle stabilen Dienstkonstrukte enthält, ist. `Amazon.CDK.Lib` Experimentelle Module, bei denen neue Funktionen aktiv entwickelt werden, werden wie benannt`Amazon.CDK.AWS.<SERVICE-NAME>.Alpha`, wobei der Servicename ein Kurzname ohne AWS oder Amazon-Präfix ist. Der NuGet Paketname für das AWS IoT-Modul lautet beispielsweise`Amazon.CDK.AWS.IoT.Alpha`. Wenn Sie ein gewünschtes Paket nicht finden können, [suchen Sie auf NuGet.org](https://www.nuget.org/packages?q=amazon.cdk.aws).

**Anmerkung**  
In der [.NET-Ausgabe der CDK API Reference](https://docs.aws.amazon.com/cdk/api/latest/dotnet/api/index.html) werden auch die Paketnamen angezeigt.

Die AWS Construct Library-Unterstützung einiger Dienste ist in mehr als einem Modul verfügbar. Zum Beispiel hat AWS IoT ein zweites Modul namens`Amazon.CDK.AWS.IoT.Actions.Alpha`.

Das Hauptmodul des AWS CDK, das Sie in den meisten AWS CDK-Apps benötigen, wird im C\$1-Code als importiert. `Amazon.CDK` Module für die verschiedenen Dienste in der Construct-Bibliothek befinden sich AWS unter. `Amazon.CDK.AWS ` Der Namespace des Amazon S3 S3-Moduls lautet `Amazon.CDK.AWS.S3` beispielsweise.

Wir empfehlen, `using` C\$1-Direktiven für die CDK-Kernkonstrukte und für jeden AWS Service zu schreiben, den Sie in jeder Ihrer C\$1-Quelldateien verwenden. Möglicherweise finden Sie es praktisch, einen Alias für einen Namespace oder Typ zu verwenden, um Namenskonflikte zu lösen. Sie können jederzeit den vollständig qualifizierten Namen eines Typs (einschließlich seines Namespaces) ohne Anweisung verwenden. `using`

## Verwaltung von Abhängigkeiten in C\$1
<a name="work-with-cdk-csharp-dependencies"></a>

In AWS C\$1-CDK-Apps verwalten Sie Abhängigkeiten mithilfe von. NuGet NuGet hat vier Standardschnittstellen, die größtenteils gleichwertig sind. Verwenden Sie diejenige, die Ihren Bedürfnissen und Ihrem Arbeitsstil entspricht. Sie können auch kompatible Tools wie [Paket](https://fsprojects.github.io/Paket/) verwenden [MyGet](https://www.myget.org/)oder die `.csproj` Datei sogar direkt bearbeiten.

NuGet erlaubt es Ihnen nicht, Versionsbereiche für Abhängigkeiten anzugeben. Jede Abhängigkeit ist an eine bestimmte Version gebunden.

Nach der Aktualisierung Ihrer Abhängigkeiten ruft Visual Studio beim nächsten Erstellen die angegebenen Versionen der einzelnen Pakete ab. NuGet Wenn Sie Visual Studio nicht verwenden, verwenden Sie den `dotnet restore` Befehl, um Ihre Abhängigkeiten zu aktualisieren.

### Direktes Bearbeiten der Projektdatei
<a name="manage-dependencies-csharp-direct-edit"></a>

Die `.csproj` Datei Ihres Projekts enthält einen `<ItemGroup>` Container, der Ihre Abhängigkeiten als `<PackageReference` Elemente auflistet.

```
<ItemGroup>
    <PackageReference Include="Amazon.CDK.Lib" Version="2.14.0" />
    <PackageReference Include="Constructs" Version="%constructs-version%" />
</ItemGroup>
```

### Die Visual NuGet Studio-GUI
<a name="manage-dependencies-csharp-vs-nuget-gui"></a>

Auf die NuGet Tools von Visual Studio kann über **Tools** > **NuGet Package Manager > Manage NuGet Packages** **for Solution** zugegriffen werden. Verwenden Sie die Registerkarte **Durchsuchen**, um die AWS Construct Library-Pakete zu finden, die Sie installieren möchten. Sie können die gewünschte Version, einschließlich Vorabversionen Ihrer Module, auswählen und sie zu jedem der geöffneten Projekte hinzufügen.

**Anmerkung**  
Alle Module der AWS Construct Library, die als „experimentell“ gelten (siehe [AWS CDK-Versionierung](versioning.md)), sind als Vorabversion gekennzeichnet und haben ein Namenssuffix. NuGet `alpha`

![\[NuGet Paketmanager, der Amazon <shared id="AWS"/> CDK-Alpha-Pakete für verschiedene Dienste anzeigt.\]](http://docs.aws.amazon.com/de_de/cdk/v2/guide/images/visual-studio-nuget.png)


Schauen Sie auf der Seite **Updates** nach, um neue Versionen Ihrer Pakete zu installieren.

### Die NuGet Konsole
<a name="manage-dependencies-csharp-vs-nuget-console"></a>

Die NuGet Konsole ist eine PowerShell basierte Schnittstelle, NuGet die im Kontext eines Visual Studio-Projekts funktioniert. Sie können es in Visual Studio öffnen, indem Sie **Tools** > **NuGet Package Manager > Package** **Manager Console** wählen. Weitere Informationen zur Verwendung dieses Tools finden [Sie unter Installieren und Verwalten von Paketen mit der Package Manager Console in Visual Studio](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-powershell).

### Der `dotnet`-Befehl.
<a name="manage-dependencies-csharp-vs-dotnet-command"></a>

Der `dotnet` Befehl ist das primäre Befehlszeilentool für die Arbeit mit Visual Studio C\$1-Projekten. Sie können ihn von jeder Windows-Eingabeaufforderung aus aufrufen. Zu seinen zahlreichen Funktionen gehört das `dotnet` Hinzufügen von NuGet Abhängigkeiten zu einem Visual Studio-Projekt.

Angenommen, Sie befinden sich im selben Verzeichnis wie die Visual Studio-Projektdatei (`.csproj`), geben Sie einen Befehl wie den folgenden ein, um ein Paket zu installieren. Da die CDK-Hauptbibliothek beim Erstellen eines Projekts enthalten ist, müssen Sie nur experimentelle Module explizit installieren. Bei experimentellen Modulen müssen Sie eine explizite Versionsnummer angeben.

```
dotnet add package Amazon.CDK.AWS.IoT.Alpha -v <VERSION-NUMBER>
```

Sie können den Befehl von einem anderen Verzeichnis aus ausführen. Geben Sie dazu nach dem `add` Schlüsselwort den Pfad zur Projektdatei oder zu dem Verzeichnis an, das sie enthält. Im folgenden Beispiel wird davon ausgegangen, dass Sie sich im Hauptverzeichnis Ihres AWS CDK-Projekts befinden.

```
dotnet add src/<PROJECT-DIR> package Amazon.CDK.AWS.IoT.Alpha -v <VERSION-NUMBER>
```

Um eine bestimmte Version eines Pakets zu installieren, fügen Sie das `-v` Flag und die gewünschte Version hinzu.

Um ein Paket zu aktualisieren, geben Sie denselben `dotnet add` Befehl ein, mit dem Sie es installiert haben. Auch für experimentelle Module müssen Sie eine explizite Versionsnummer angeben.

Weitere Informationen zum Verwalten von Paketen mit dem `dotnet` Befehl finden [Sie unter Pakete mit der dotnet-CLI installieren und verwalten](https://docs.microsoft.com/en-us/nuget/consume-packages/install-use-packages-dotnet-cli).

### Der `nuget`-Befehl.
<a name="manage-dependencies-csharp-vs-nuget-command"></a>

Das `nuget` Befehlszeilentool kann NuGet Pakete installieren und aktualisieren. Es erfordert jedoch, dass Ihr Visual Studio-Projekt anders eingerichtet wird als bei der `cdk init` Einrichtung von Projekten. (Technische Details: `nuget` funktioniert mit `Packages.config` Projekten, `cdk init` erstellt aber ein Projekt im neueren Stil`PackageReference`.)

Wir empfehlen nicht, das `nuget` Tool mit AWS CDK-Projekten zu verwenden, die von erstellt wurden. `cdk init` Wenn Sie einen anderen Projekttyp verwenden und diesen verwenden möchten`nuget`, finden Sie weitere Informationen in der [NuGet CLI-Referenz](https://docs.microsoft.com/en-us/nuget/reference/nuget-exe-cli-reference).

## AWS CDK-Idiome in C\$1
<a name="csharp-cdk-idioms"></a>

### Props
<a name="csharp-props"></a>

Alle AWS Construct-Library-Klassen werden mit drei Argumenten instanziiert: dem *Bereich*, in dem das Konstrukt definiert wird (sein übergeordnetes Objekt im Konstruktbaum), einer *ID* und *props*, einem Bündel von key/value Paaren, das das Konstrukt verwendet, um die von ihm erstellten Ressourcen zu konfigurieren. Andere Klassen und Methoden verwenden ebenfalls das Muster „Bündel von Attributen“ für Argumente.

In C\$1 werden Requisiten mit einem Requisitentyp ausgedrückt. In idiomatischer C\$1-Manier können wir einen Objektinitialisierer verwenden, um die verschiedenen Eigenschaften festzulegen. Hier erstellen wir einen Amazon S3 S3-Bucket mit dem `Bucket` Konstrukt; der entsprechende Requisitentyp ist`BucketProps`.

```
var bucket = new Bucket(this, "amzn-s3-demo-bucket", new BucketProps {
    Versioned = true
});
```

**Tipp**  
Fügen Sie das Paket `Amazon.JSII.Analyzers` zu Ihrem Projekt hinzu, damit die erforderlichen Werte in Ihren Requisitendefinitionen in Visual Studio überprüft werden.

Wenn Sie eine Klasse erweitern oder eine Methode überschreiben, möchten Sie möglicherweise zusätzliche Requisiten für Ihre eigenen Zwecke akzeptieren, die von der übergeordneten Klasse nicht verstanden werden. Dazu müssen Sie den entsprechenden Requisitentyp in Unterklassen unterteilen und die neuen Attribute hinzufügen.

```
// extend BucketProps for use with MimeBucket
class MimeBucketProps : BucketProps {
    public string MimeType { get; set; }
}

// hypothetical bucket that enforces MIME type of objects inside it
class MimeBucket : Bucket {
     public MimeBucket( readonly Construct scope, readonly string id, readonly MimeBucketProps props=null) : base(scope, id, props) {
         // ...
     }
}

// instantiate our MimeBucket class
var bucket = new MimeBucket(this, "amzn-s3-demo-bucket", new MimeBucketProps {
    Versioned = true,
    MimeType = "image/jpeg"
});
```

Wenn Sie den Initialisierer oder die überschriebene Methode der übergeordneten Klasse aufrufen, können Sie in der Regel die Requisiten übergeben, die Sie erhalten haben. Der neue Typ ist mit seinem übergeordneten Typ kompatibel, und zusätzliche Requisiten, die Sie hinzugefügt haben, werden ignoriert.

Eine future Version des AWS CDK könnte zufällig eine neue Immobilie mit einem Namen hinzufügen, den Sie für Ihre eigene Immobilie verwendet haben. Dies wird bei der Verwendung Ihres Konstrukts oder Ihrer Methode zu keinen technischen Problemen führen (da Ihre Eigenschaft nicht „in der Kette“ weitergereicht wird, verwendet die übergeordnete Klasse oder überschriebene Methode einfach einen Standardwert), kann aber bei den Benutzern Ihres Konstrukts zu Verwirrung führen. Sie können dieses potenzielle Problem vermeiden, indem Sie Ihre Eigenschaften so benennen, dass sie eindeutig zu Ihrem Konstrukt gehören. Wenn es viele neue Eigenschaften gibt, bündeln Sie sie in einer Klasse mit dem entsprechenden Namen und übergeben Sie sie als einzelne Eigenschaft.

### Generische Strukturen
<a name="csharp-generic-structures"></a>

In einigen APIs Fällen verwendet das AWS CDK JavaScript Arrays oder untypisierte Objekte als Eingabe für eine Methode. (Siehe zum Beispiel die Methode.) AWS CodeBuild [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codebuild.BuildSpec.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codebuild.BuildSpec.html) In C\$1 werden diese Objekte dargestellt als`System.Collections.Generic.Dictionary<String, Object>`. In Fällen, in denen es sich bei den Werten ausschließlich um Zeichenketten handelt, können Sie Folgendes verwenden`Dictionary<String, String>`. JavaScript Arrays werden in C\$1 als `object[]` `string[]` Array-Typen dargestellt.

**Tipp**  
Sie können kurze Aliase definieren, um die Arbeit mit diesen speziellen Wörterbuchtypen zu vereinfachen.  

```
using StringDict = System.Collections.Generic.Dictionary<string, string>;
using ObjectDict = System.Collections.Generic.Dictionary<string, object>;
```

### Fehlende Werte
<a name="csharp-missing-values"></a>

In C\$1 werden fehlende Werte in AWS CDK-Objekten wie Requisiten durch dargestellt. `null` Der Null-bedingte Elementzugriffsoperator `?.` und der Null-Koaleszenzoperator eignen sich für die Arbeit mit diesen Werten. `??`

```
// mimeType is null if props is null or if props.MimeType is null
string mimeType = props?.MimeType;

// mimeType defaults to text/plain. either props or props.MimeType can be null
string MimeType = props?.MimeType ?? "text/plain";
```

## CDK-Anwendungen erstellen und ausführen
<a name="csharp-running"></a>

Das AWS CDK kompiliert Ihre App automatisch, bevor sie ausgeführt wird. Es kann jedoch nützlich sein, Ihre App manuell zu erstellen, um nach Fehlern zu suchen und Tests durchzuführen. Sie können dies tun, indem Sie in Visual Studio F6 drücken oder von der Befehlszeile `dotnet build src` aus eingeben, wo sich das Verzeichnis in Ihrem Projektverzeichnis `src` befindet, das die Visual Studio Solution (`.sln`) -Datei enthält.