Azure File Share-Clientbibliothek für Java– Version 12.20.1

Das SMB-Protokoll (Server Message Block) ist das bevorzugte Dateifreigabeprotokoll, das heute lokal verwendet wird. Mit dem Microsoft Azure File Share-Dienst können Kunden die Verfügbarkeit und Skalierbarkeit von Azure-IaaS-SMB (Cloud Infrastructure-as-a-Service) nutzen, ohne SMB-Clientanwendungen neu schreiben zu müssen.

Auf Dateien, die in Azure File Share-Dienstfreigaben gespeichert sind, kann über das SMB-Protokoll und auch über REST-APIs zugegriffen werden. Der Dateifreigabedienst bietet die folgenden vier Ressourcen: das Speicherkonto, Freigaben, Verzeichnisse und Dateien. Freigaben bieten die Möglichkeit, Dateisätze zu organisieren und können außerdem als SMB-Dateifreigabe bereitgestellt werden, die in der Cloud gehostet wird.

Quellcode | API-Referenzdokumentation | REST-API-Dokumentation | Produktdokumentation | Proben

Erste Schritte

Voraussetzungen

Einschließen des Pakets

BOM-Datei einfügen

Fügen Sie azure-sdk-bom in Ihr Projekt ein, um von der GA-Version der Bibliothek abhängig zu sein. Ersetzen Sie im folgenden Codeausschnitt den Platzhalter {bom_version_to_target} durch die Versionsnummer. Weitere Informationen zur BOM finden Sie in der INFODATEI FÜR AZURE SDK-STÜCKLISTEN.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version_to_target}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

und fügen Sie dann die direkte Abhängigkeit ohne Versions-Tag in den Abschnitt „Abhängigkeit“ ein.

<dependencies>
  <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-storage-file-share</artifactId>
  </dependency>
</dependencies>

Direkte Abhängigkeiten einfügen

Wenn Sie eine Abhängigkeit von einer bestimmten Version der Bibliothek annehmen möchten, die nicht in der BoM vorhanden ist, fügen Sie die direkte Abhängigkeit wie folgt zu Ihrem Projekt hinzu.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-file-share</artifactId>
  <version>12.20.1</version>
</dependency>

Erstellen eines Speicherkontos

Zum Erstellen eines Speicherkontos können Sie das Azure-Portal oder die Azure CLI verwenden.

az storage account create \
    --resource-group <resource-group-name> \
    --name <storage-account-name> \
    --location <location>

Authentifizieren des Clients

Um mit dem Speicherdienst (Dateifreigabedienst, Freigabe, Verzeichnis, MessageId, Datei) zu interagieren, müssen Sie eine instance der Service Client-Klasse erstellen. Um dies zu ermöglichen, benötigen Sie die Konto-SAS-Zeichenfolge (Shared Access Signature) des Speicherkontos. Weitere Informationen finden Sie unter SAS-Token.

Anmeldeinformationen abrufen

  • SAS-Token

    • Verwenden Sie den folgenden Azure CLI-Codeausschnitt , um das SAS-Token aus dem Speicherkonto abzurufen.

      az storage file generate-sas
          --name {account name}
          --expiry {date/time to expire SAS token}
          --permission {permission to grant}
          --connection-string {connection string of the storage account}
      
      CONNECTION_STRING=<connection-string>
      
      az storage file generate-sas
          --name javasdksas
          --expiry 2019-06-05
          --permission rpau
          --connection-string $CONNECTION_STRING
      
    • Alternativ können Sie das Konto-SAS-Token aus dem Azure-Portal abrufen.

      1. Wechseln Sie zum Speicherkonto.
      2. Klicken Sie auf "Shared Access Signature".
      3. Klicken Sie auf "SAS und Verbindungszeichenfolge generieren".
  • Anmeldeinformationen für gemeinsam genutzte Schlüssel

    • Es gibt zwei Möglichkeiten zum Erstellen von Anmeldeinformationen mit gemeinsam genutztem Schlüssel: Die erste ist die Verwendung des Speicherkontonamens und des Kontoschlüssels. Die zweite ist die Verwendung des Speichers Verbindungszeichenfolge.
      1. Verwenden Sie den Kontonamen und den Kontoschlüssel.
        1. Der Kontoname ist der Name Ihres Speicherkontos.
        2. Wechseln Sie zum Speicherkonto.
        3. Wählen Sie die Registerkarte "Zugriffsschlüssel" aus.
        4. Kopieren Sie den Wert "Key" für Schlüssel 1 oder Schlüssel 2.
      2. Verwenden der Verbindungszeichenfolge
        1. Wechseln Sie zum Speicherkonto.
        2. Wählen Sie die Registerkarte "Zugriffsschlüssel" aus.
        3. Kopieren Sie den Wert "Verbindungszeichenfolge" für Schlüssel 1 oder Schlüssel 2.

Wichtige Begriffe

URL-Format

Dateifreigaben können im folgenden URL-Format adressierbar sein:

https://<storage account>.file.core.windows.net/<share>

Mit der folgenden URL kann eine der Warteschlangen im Diagramm adressiert werden:

https://myaccount.file.core.windows.net/images-to-download

Syntax von Ressourcen-URIs

Für das Speicherkonto schließt der Basis-URI für Warteschlangenvorgänge nur den Namen des Kontos ein:

https://myaccount.file.core.windows.net

Für datei enthält der Basis-URI den Namen des Kontos und den Namen des Verzeichnisses/der Datei:

https://myaccount.file.core.windows.net/myshare/mydirectorypath/myfile

Behandeln von Ausnahmen

Verwendet den shareServiceClient unten aus shareServiceClient generierten Abschnitt.

try {
    shareServiceClient.createShare("myShare");
} catch (ShareStorageException e) {
    logger.error("Failed to create a share with error code: " + e.getErrorCode());
}

Ressourcennamen

Der URI zum Verweisen auf eine Freigabe, ein Verzeichniss oder eine Datei muss eindeutig sein. Innerhalb eines bestimmten Speicherkontos muss jede Freigabe einen eindeutigen Namen aufweisen. Jede Datei innerhalb einer bestimmten Freigabe oder eines Verzeichnisses muss auch innerhalb dieser Freigabe oder dieses Verzeichnisses einen eindeutigen Namen haben.

Wenn Sie versuchen, eine Freigabe, ein Verzeichnis oder eine Datei mit einem Namen zu erstellen, der gegen die Benennungsregeln verstößt, schlägt die Anforderung mit dem Statuscode 400 (Ungültige Anforderung) fehl.

Freigabenamen

Die Regeln für Dateifreigabedienstnamen sind restriktiver als im SMB-Protokoll für SMB-Freigabenamen vorgeschrieben, sodass die Blob- und Dateidienste ähnliche Namenskonventionen für Container und Freigaben verwenden können. Die Benennungseinschränkungen für Freigaben lauten wie folgt:

  1. Ein Freigabename muss ein gültiger DNS-Name sein.
  2. Freigabenamen müssen mit einem Buchstaben oder einer Ziffer beginnen und dürfen nur Buchstaben, Ziffern und den Bindestrich (-) enthalten.
  3. Jedem Bindestrich (-) muss unmittelbar ein Buchstabe oder eine Ziffer voran- und nachgestellt werden. Aufeinander folgende Bindestriche sind in Freigabenamen nicht zulässig.
  4. Alle Buchstaben in einem Freigabenamen müssen Kleinbuchstaben sein.
  5. Freigabenamen müssen eine Länge zwischen 3 und 63 Zeichen aufweisen.

Verzeichnis- und Dateinamen

Die Benennungsregeln für den Azure-Dateifreigabedienst für Verzeichnis- und Dateinamen sind wie folgt:

  1. Bei Freigabeverzeichnissen und Dateinamen wird die Groß-/Kleinschreibung beibehalten und die Groß-/Kleinschreibung wird nicht beachtet.
  2. Freigabeverzeichnis- und Dateikomponentennamen dürfen nicht mehr als 255 Zeichen lang sein.
  3. Freigabeverzeichnisnamen dürfen nicht mit dem Schrägstrich (/) enden. Falls eingegeben, erfolgt eine automatische Entfernung.
  4. Freigabedateinamen dürfen nicht mit dem Schrägstrich (/) enden.
  5. Reservierte URL-Zeichen müssen korrekt mit Escapezeichen versehen sein.
  6. Die folgenden Zeichen sind nicht zulässig: " \ / : | < > * ?
  7. Ungültige URL-Pfadzeichen sind unzulässig. Codepunkte wie \uE000, die in NTFS-Dateinamen gültig sind, sind keine gültigen Unicodezeichen. Darüber hinaus sind einige ASCII- und Unicode-Zeichen, z. B. Steuerzeichen (0x00 bis 0x1F, \u0081 usw.), ebenfalls nicht zulässig. Regeln für Unicode-Zeichenfolgen in HTTP/1.1 finden Sie unter RFC 2616, Abschnitt 2.2: Grundlegende Regeln und RFC 3987.
  8. Die folgenden Dateinamen sind nicht zulässig: LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, PRN, AUX, NUL, CON, CLOCK$, Punktzeichen (.) und zwei Punktzeichen (.).

Metadatennamen

Metadaten für eine Freigabe- oder Dateiressource werden als Name-Wert-Paare gespeichert, die der Ressource zugeordnet sind. Verzeichnisse haben keine Metadaten. Metadatennamen müssen den Benennungsregeln für C#-Bezeichner entsprechen.

Beachten Sie, dass für Metadatennamen die Groß-/Kleinschreibung beibehalten wird, die bei der Erstellung verwendet wurde. Beim Festlegen oder Lesen wird die Groß-/Kleinschreibung aber nicht berücksichtigt. Wenn zwei oder mehr Metadatenheader mit demselben Namen für eine Ressource gesendet werden, gibt der Azure-Dateidienst den Statuscode 400 zurück (Ungültige Anforderung).

Freigabedienste

Die REST-API des Dateifreigabediensts stellt Vorgänge für Konten und die Verwaltung von Dateidiensteigenschaften bereit. Sie ermöglicht das Auflisten und Löschen von Freigaben, das Abrufen und Festlegen von Dateidiensteigenschaften. Sobald Sie über das SASToken verfügen, können Sie die shareServiceClient mit ${accountName}erstellen. ${sasToken}

String shareServiceURL = String.format("https://%s.file.core.windows.net", ACCOUNT_NAME);
ShareServiceClient shareServiceClient = new ShareServiceClientBuilder().endpoint(shareServiceURL)
    .sasToken(SAS_TOKEN).buildClient();

Teilen

Die Freigabenressource enthält Metadaten und Eigenschaften für die betreffende Freigabe. Es ermöglicht die Vorgänge zum Erstellen, Erstellen von Momentaufnahme, Löschen von Freigaben, Abrufen von Freigabeeigenschaften, Festlegen von Metadaten, Abrufen und Festlegen von ACL (Zugriffsrichtlinie). Das Abrufen und Festlegen von ACL (Zugriffsrichtlinie) kann nur von ShareClient mit ConnectionString verwendet werden.

Freigeben mit SASToken

Sobald Sie über das SASToken verfügen, können Sie den Freigabeclient mit ${accountName}, ${shareName}erstellen. ${sasToken}

String shareURL = String.format("https://%s.file.core.windows.net", ACCOUNT_NAME);
ShareClient shareClient = new ShareClientBuilder().endpoint(shareURL)
    .sasToken(SAS_TOKEN).shareName(shareName).buildClient();

Freigeben mit ConnectionString

Sobald Sie über connectionString verfügen, können Sie den Freigabeclient mit ${accountName}, ${shareName}erstellen. ${connectionString}

String shareURL = String.format("https://%s.file.core.windows.net", ACCOUNT_NAME);
ShareClient shareClient = new ShareClientBuilder().endpoint(shareURL)
    .connectionString(CONNECTION_STRING).shareName(shareName).buildClient();

Freigeben mit TokenCredential

Sobald Sie über tokenCredential verfügen, können Sie den Freigabeclient mit ${accountName}, ${shareName} und ShareTokenIntenterstellen. ShareTokenIntent.BACKUP gibt Anforderungen an, die für Sicherungs-/Administratortypvorgänge vorgesehen sind, was bedeutet, dass alle Datei-/Verzeichnis-ACLs umgangen und vollständige Berechtigungen erteilt werden. Der Benutzer muss über die erforderliche RBAC-Berechtigung verfügen, um verwenden ShareTokenIntent.BACKUPzu können.

String shareURL = String.format("https://%s.file.core.windows.net", ACCOUNT_NAME);

ShareClient serviceClient = new ShareClientBuilder()
    .endpoint(shareURL)
    .credential(tokenCredential)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .shareName(shareName)
    .buildClient();

Verzeichnis

Die Verzeichnisressource enthält die Eigenschaften für dieses Verzeichnis. Es ermöglicht die Vorgänge zum Erstellen, Auflisten, Löschen von Verzeichnissen, Unterverzeichnissen oder Dateien, Abrufen von Eigenschaften, Festlegen von Metadaten, Auflisten und Erzwingen des Schließens der Handles. Sobald Sie über sasToken verfügen, können Sie den Dateidienstclient mit ${accountName}, ${shareName}, ${directoryPath}erstellen. ${sasToken}

String directoryURL = String.format("https://%s.file.core.windows.net", ACCOUNT_NAME);
ShareDirectoryClient directoryClient = new ShareFileClientBuilder().endpoint(directoryURL)
    .sasToken(SAS_TOKEN).shareName(shareName).resourcePath(directoryPath).buildDirectoryClient();

Datei

Die Dateiressource enthält die Eigenschaften für diese Datei. Es ermöglicht die Vorgänge zum Erstellen, Hochladen, Kopieren, Herunterladen, Löschen von Dateien oder Bereich der Dateien, Abrufen von Eigenschaften, Festlegen von Metadaten, Auflisten und Erzwingen des Schließens der Handles. Sobald Sie über das SASToken verfügen, können Sie den Dateidienstclient mit ${accountName}, ${shareName}, ${directoryPath}, ${fileName}, , ${sasToken}

String fileURL = String.format("https://%s.file.core.windows.net", ACCOUNT_NAME);
ShareFileClient fileClient = new ShareFileClientBuilder().connectionString(CONNECTION_STRING)
    .endpoint(fileURL).shareName(shareName).resourcePath(directoryPath + "/" + fileName).buildFileClient();

Beispiele

Die folgenden Abschnitte enthalten mehrere Codeausschnitte, die einige der gängigsten Configuration Service-Aufgaben behandeln, einschließlich:

Erstellen einer Freigabe

Erstellen Sie eine Freigabe im Speicherkonto. Löst StorageException aus, wenn die Freigabe nicht erstellt werden kann. Verwenden eines ShareServiceClient in KeyConcept, ${shareServiceClient}.

String shareName = "testshare";
shareServiceClient.createShare(shareName);

Erstellen eines Momentaufnahme auf Freigabe

Verwenden eines ShareServiceClient in KeyConcept, ${shareServiceClient}.

String shareName = "testshare";
ShareClient shareClient = shareServiceClient.getShareClient(shareName);
shareClient.createSnapshot();

Erstellen eines Verzeichnisses

Der oben initialisierte shareClient wird ${shareClient}verwendet.

String dirName = "testdir";
shareClient.createDirectory(dirName);

Erstellen eines Unterverzeichnisses

Verwenden des directoryClient in KeyConcept, ${directoryClient}.

String subDirName = "testsubdir";
directoryClient.createSubdirectory(subDirName);

Erstellen einer Datei

Verwenden des directoryClient in KeyConcept, ${directoryClient} .

String fileName = "testfile";
long maxSize = 1024;
directoryClient.createFile(fileName, maxSize);

Auflisten aller Freigaben

Verwenden von shareServiceClient in KeyConcept, ${shareServiceClient}

shareServiceClient.listShares();

Auflisten aller Unterverzeichnisse und Dateien

Verwenden des directoryClient in KeyConcept, ${directoryClient}

directoryClient.listFilesAndDirectories();

Auflisten aller Bereiche in der Datei

Verwenden des fileClient in KeyConcept, ${fileClient}

fileClient.listRanges();

Löschen einer Freigabe

Verwenden des shareClient in KeyConcept, ${shareClient}

shareClient.delete();

Löschen eines Verzeichnisses

Nehmen Sie den shareClient in KeyConcept, ${shareClient} .

String dirName = "testdir";
shareClient.deleteDirectory(dirName);

Löschen eines Unterverzeichnisses

Verwenden des directoryClient in KeyConcept, ${directoryClient} .

String subDirName = "testsubdir";
directoryClient.deleteSubdirectory(subDirName);

Löschen von Dateien

Verwenden des directoryClient in KeyConcept, ${directoryClient} .

String fileName = "testfile";
directoryClient.deleteFile(fileName);

Kopieren einer Datei

Verwenden des fileClients in KeyConcept ${fileClient} mit der Zeichenfolge der Quell-URL.

String sourceURL = "https://myaccount.file.core.windows.net/myshare/myfile";
Duration pollInterval = Duration.ofSeconds(2);
SyncPoller<ShareFileCopyInfo, Void> poller = fileClient.beginCopy(sourceURL, (Map<String, String>) null, pollInterval);

Abbrechen des Kopierens einer Datei

Verwenden Sie den fileClient in KeyConcept mit ${fileClient} der antwort auf die Kopierinformationen, die oben ${copyId}=[copyInfoResponse](#copy-a-file)zurückgegeben wurde.

fileClient.abortCopy("copyId");

Hochladen von Daten in den Speicher

Verwenden sie den fileClient in KeyConcept ${fileClient} mit Daten von "default".

String uploadText = "default";
InputStream data = new ByteArrayInputStream(uploadText.getBytes(StandardCharsets.UTF_8));
fileClient.upload(data, uploadText.length());

Hochladen von Daten, die größer als 4 MB sind, in den Speicher

Verwenden sie den fileClient in KeyConcept ${fileClient} mit Daten von "default".

byte[] data = "Hello, data sample!".getBytes(StandardCharsets.UTF_8);

long chunkSize = 4 * 1024 * 1024L;
if (data.length > chunkSize) {
    for (int offset = 0; offset < data.length; offset += chunkSize) {
        try {
            // the last chunk size is smaller than the others
            chunkSize = Math.min(data.length - offset, chunkSize);

            // select the chunk in the byte array
            byte[] subArray = Arrays.copyOfRange(data, offset, (int) (offset + chunkSize));

            // upload the chunk
            fileClient.uploadWithResponse(new ByteArrayInputStream(subArray), chunkSize, (long) offset, null, Context.NONE);
        } catch (RuntimeException e) {
            logger.error("Failed to upload the file", e);
            if (Boolean.TRUE.equals(fileClient.exists())) {
                fileClient.delete();
            }
            throw e;
        }
    }
} else {
    fileClient.upload(new ByteArrayInputStream(data), data.length);
}

Hochladen der Datei in den Speicher

Nehmen Sie den fileClient in KeyConcept, ${fileClient} .

String filePath = "${myLocalFilePath}";
fileClient.uploadFromFile(filePath);

Herunterladen von Daten aus dem Dateibereich

Verwenden sie den fileClient in KeyConcept mit ${fileClient} dem Bereich von 1024 bis 2048.

ShareFileRange fileRange = new ShareFileRange(0L, 2048L);
OutputStream stream = new ByteArrayOutputStream();
fileClient.downloadWithResponse(stream, fileRange, false, null, Context.NONE);

Herunterladen der Datei aus dem Speicher

Verwenden Sie den fileClient in KeyConcept, ${fileClient} und laden Sie es in die Datei von filePath herunter.

String filePath = "${myLocalFilePath}";
fileClient.downloadToFile(filePath);

Abrufen von Eigenschaften eines Freigabediensts

Verwenden eines ShareServiceClient in KeyConcept, ${shareServiceClient} .

shareServiceClient.getProperties();

Festlegen von Eigenschaften eines Freigabediensts

Verwenden eines ShareServiceClient in KeyConcept, ${shareServiceClient} .

ShareServiceProperties properties = shareServiceClient.getProperties();

properties.getMinuteMetrics().setEnabled(true).setIncludeApis(true);
properties.getHourMetrics().setEnabled(true).setIncludeApis(true);

shareServiceClient.setProperties(properties);

Festlegen von Freigabemetadaten

Nehmen Sie den shareClient in KeyConcept, ${shareClient} .

Map<String, String> metadata = Collections.singletonMap("directory", "metadata");
shareClient.setMetadata(metadata);

Abrufen einer Freigabezugriffsrichtlinie

Nehmen Sie den shareClient in KeyConcept, ${shareClient} .

shareClient.getAccessPolicy();

Festlegen einer Freigabezugriffsrichtlinie

Nehmen Sie den shareClient in KeyConcept, ${shareClient} .

ShareAccessPolicy accessPolicy = new ShareAccessPolicy().setPermissions("r")
    .setStartsOn(OffsetDateTime.now(ZoneOffset.UTC))
    .setExpiresOn(OffsetDateTime.now(ZoneOffset.UTC).plusDays(10));
ShareSignedIdentifier permission = new ShareSignedIdentifier().setId("mypolicy").setAccessPolicy(accessPolicy);
shareClient.setAccessPolicy(Collections.singletonList(permission));

Abrufen von Handles für eine Verzeichnisdatei

Verwenden des directoryClient in KeyConcept, ${directoryClient}

PagedIterable<HandleItem> handleItems = directoryClient.listHandles(null, true, Duration.ofSeconds(30), Context.NONE);

Schließen von Handles für Handle-ID erzwingen

Verwenden des directoryClient in KeyConcept ${directoryClient} und der oben zurückgegebenen Handle-ID ${handleId}=[handleItems](#get-handles-on-directory-file)

PagedIterable<HandleItem> handleItems = directoryClient.listHandles(null, true, Duration.ofSeconds(30), Context.NONE);
String handleId = handleItems.iterator().next().getHandleId();
directoryClient.forceCloseHandleWithResponse(handleId, Duration.ofSeconds(30), Context.NONE);

Festlegen des Kontingents für freigabe

Nehmen Sie den shareClient in KeyConcept, ${shareClient} .

int quotaOnGB = 1;
shareClient.setPropertiesWithResponse(new ShareSetPropertiesOptions().setQuotaInGb(quotaOnGB), null, Context.NONE);

Festlegen von Datei-HTTP-Headern

Nehmen Sie den fileClient in KeyConcept, ${fileClient} .

ShareFileHttpHeaders httpHeaders = new ShareFileHttpHeaders().setContentType("text/plain");
fileClient.setProperties(1024, httpHeaders, null, null);

Problembehandlung

Allgemein

Wenn Sie mit der Datei mithilfe dieser Java-Clientbibliothek interagieren, entsprechen vom Dienst zurückgegebene Fehler denselben HTTP-status Codes, die für REST-API-Anforderungen zurückgegeben werden. Wenn Sie beispielsweise versuchen, eine Freigabe abzurufen, die in Ihrem Speicherkonto nicht vorhanden ist, wird ein 404 Fehler zurückgegeben, der angibt Not Found.

HTTP-Standardclient

Alle Clientbibliotheken verwenden standardmäßig den Netty-HTTP-Client. Durch Hinzufügen der obigen Abhängigkeit wird die Clientbibliothek automatisch für die Verwendung des Netty-HTTP-Clients konfiguriert. Das Konfigurieren oder Ändern des HTTP-Clients wird detailliert im Wiki zu HTTP-Clients beschrieben.

SSL-Standardbibliothek

Alle Clientbibliotheken verwenden standardmäßig die Tomcat-native Boring-SSL-Bibliothek, um die Leistung auf nativer Ebene für SSL-Vorgänge zu ermöglichen. Die Boring-SSL-Bibliothek ist eine Uber-JAR-Datei mit nativen Bibliotheken für Linux/macOS/Windows und bietet im Vergleich zur SSL-Standardimplementierung im JDK eine bessere Leistung. Weitere Informationen, einschließlich zur Reduzierung der Abhängigkeitsgröße, finden Sie im Abschnitt Leistungsoptimierung des Wikis.

Nächste Schritte

Mitwirken

Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Ausführliche Informationen finden Sie unter https://cla.microsoft.com.

Wenn Sie einen Pull Request (PR) übermitteln, überprüft ein CLA-Bot automatisch, ob Sie eine Lizenzvereinbarung bereitstellen und den PR entsprechend ergänzen müssen (z.B. mit einer Bezeichnung oder einem Kommentar). Führen Sie einfach die Anweisungen des Bots aus. Sie müssen dies nur einmal für alle Repositorys ausführen, die unsere CLA verwenden.

Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.

Ausführliche Informationen zum Mitwirken an diesem Repository finden Sie im Leitfaden zum Mitwirken.

  1. Verzweigen sie
  2. Erstellen Ihrer Featurebranch (git checkout -b my-new-feature)
  3. Committen Ihrer Änderungen (git commit -am 'Add some feature')
  4. Pushen in den Branch (git push origin my-new-feature)
  5. Erstellen eines neuen Pull Requests

Aufrufe