Freigeben über


Referenz zum YaML-Quellcodeverwaltungsformat der Lösung

Dieser Artikel ist ein Verweis auf das YAML-basierte Quellcodeverwaltungsformat, das bei Folgenden verwendet wird:

  • Übernehmen Sie Lösungen mithilfe der systemeigenen Dataverse Git-Integration in Power Apps.
  • Extrahieren von Lösungen mit pac solution clone oder pac solution sync.
  • Führen Sie SolutionPackager manuell für einen Ordner aus, der YAML-Manifestdateien enthält.

Das YAML-Format unterscheidet sich vom klassischen XML-Layout. Das Verständnis der Struktur ist wichtig, wenn Sie einen YAML-Ordner manuell in eine .zip Datei packen möchten, die Dataverse importieren kann.

Von Bedeutung

Die Unterstützung des YAML-Quellcodeverwaltungsformats in der pac CLI erfordert Microsoft. PowerApps.CLI, Version 2.4.1 oder höher. Laden Sie die neueste Version von NuGet herunter, oder aktualisieren Sie sie über pac install latest. SolutionPackager.exe, das im NuGet-Paket enthalten ist, unterstützt das YAML-Format aus derselben Version.

Übersicht über die Ordnerstruktur

Ein YAML-Format-Repositorystamm enthält die folgenden Verzeichnisse der obersten Ebene:

<repositoryRoot>/
├── solutions/
│   └── <SolutionUniqueName>/       (one subfolder per solution)
│       ├── solution.yml
│       ├── solutioncomponents.yml
│       ├── rootcomponents.yml
│       └── missingdependencies.yml
├── publishers/
│   └── <PublisherUniqueName>/      (one subfolder per publisher)
│       └── publisher.yml
├── entities/                        (entity components, if any)
│   └── <entity_schema_name>/
│       ├── attributes/
│       ├── formxml/
│       ├── savedqueries/
│       └── ...
├── workflows/                       (classic workflow definitions, if any)
├── modernflows/                     (Power Automate cloud flows, if any)
├── canvasapps/                      (canvas app .msapp files, if any)
│   └── <canvas_app_schema_name>/
│       └── <name>.msapp
├── environmentvariabledefinitions/  (environment variable definitions, if any)
├── connectors/                      (custom connectors, if any)
└── [other component folders]/

Die solutions/ Verzeichnisse sind publishers/ erforderlich. Alle Komponentenordner im Stammverzeichnis sind optional und hängen davon ab, was die Lösung enthält.

Von Bedeutung

Alle YAML-Manifestdateien (solution.yml, publisher.ymlusw.) müssen unter ihren jeweiligen Unterverzeichnissen (solutions/<name>/, publishers/<name>/) abgelegt werden. Wenn Sie sie im Repositorystamm platzieren, wird die Formaterkennung verhindert und bewirkt, dass das SolutionPackager-Tool auf das XML-Format zurückfällt , was zu einem irreführenden Fehler bei fehlendem Customizations.xmlFehler führt. Weitere Informationen: Problembehandlung beim SolutionPackager-Tool

Automatische Erkennung formatieren

SolutionPackager (und pac solution pack) erkennt das Format automatisch wie folgt:

Zustand Erkanntes Format Verhalten
solutions/*/solution.yml gefunden – eine Lösung YAML Lösungsname abgeleitet vom Unterordnernamen
solutions/*/solution.yml gefunden – mehrere Lösungen YAML /SolutionName Argument erforderlich, um anzugeben, welche Lösung verpackt werden soll
Kein solutions/ Unterverzeichnis vorhanden XML (Legacy) Other\Solution.xml Erwartet undOther\Customizations.xml

Manifestdateien

solution.yml

Befindet sich in solutions/<SolutionUniqueName>/solution.yml. Enthält Lösungsmetadaten der obersten Ebene – die YAML-Entsprechung solution.xml im XML-Format.

Schlüsselfelder umfassen den eindeutigen Namen, die Version, den Anzeigenamen, die Beschreibung und einen Verweis auf den Herausgeber.

solutioncomponents.yml

Befindet sich in solutions/<SolutionUniqueName>/solutioncomponents.yml. Listet relative Pfade zu allen Komponentendateien auf, die in dieser Lösung enthalten sind. SolutionPackager liest diese Datei während des Pakets, um Komponentenquellen zu finden.

Beispielauszug:

- Path: entities/account
- Path: entities/contact
- Path: canvasapps/myapp_<guid>
- Path: publishers/MyPublisher

rootcomponents.yml

Befindet sich in solutions/<SolutionUniqueName>/rootcomponents.yml. Listet die Komponenten auf Stammebene auf (in der Regel Tabellen und andere Objekte auf oberster Ebene), die zu dieser Lösung gehören.

Hinweis

Wenn eine Komponente in der Quelldatei zwar nicht im rootcomponents.yml Ordner deklariert ist (z. B. eine Canvas-App-Datei .msapp unter canvasapps/<name>/), gibt SolutionPackager eine Warnung aus und übergibt diese Komponente aus dem Gepackten .zip. Der Packvorgang wird weiterhin erfolgreich mit Dem Exitcode 0 abgeschlossen.

Pack-Erfolg garantiert nicht den Importerfolg. Wenn solutioncomponents.yml erforderliche Abhängigkeitspfade , z. B. übergeordnete Entitätsordner oder Beziehungsdefinitionen, weggelassen entityrelationships/ werden, treten die Lösungspakete ohne Fehler auf, schlägt aber beim Import mit einer Meldung fehl, z. B.: "Attribute fehlen zugeordnete Beziehungsdefinitionen." Stellen Sie immer sicher, dass solutioncomponents.yml alle abhängigen Entitäten und Beziehungen enthalten sind, nicht nur die lösungseigenen Entitäten.

missingdependencies.yml

Befindet sich in solutions/<SolutionUniqueName>/missingdependencies.yml. Zeichnet alle Lösungsabhängigkeiten auf, die beim letzten Export der Lösung nicht vorhanden waren. Wird für Informationszwecke und zur Überprüfung der Vollständigkeit beim Import verwendet.

publisher.yml

Befindet sich in publishers/<PublisherUniqueName>/publisher.yml. Enthält die Herausgeberdefinition – eindeutiger Name, Anzeigename, Anpassungspräfix und Optionswertpräfix.

Minimale erforderliche Struktur:

Publisher:
  UniqueName: mypublisher
  LocalizedNames:
    LocalizedName:
      '@description': My Publisher
      '@languagecode': '1033'
  Descriptions:
  EMailAddress:
    '@xsi:nil': 'true'
    '@xmlns:xsi': http://www.w3.org/2001/XMLSchema-instance
  SupportingWebsiteUrl:
    '@xsi:nil': 'true'
    '@xmlns:xsi': http://www.w3.org/2001/XMLSchema-instance
  CustomizationPrefix: myp
  CustomizationOptionValuePrefix: '12345'
  Addresses:

Unterstützung des Komponententyps

In der folgenden Tabelle wird aufgeführt, wie jeder Komponententyp im YAML-Format behandelt wird.

Komponententyp Im YAML-Format Hinweise
Entitäten (Tabellen), Attribute, Formulare, Ansichten • YAML-Dateien Als einzelne YAML-Dateien pro Unterkomponente gespeichert
Workflows (klassisch) • YAML-Dateien Unter workflows/
Moderne Flüsse (Power Automate Cloudflüsse) — nur YAML-Format Unter modernflows/; wird im XML-Format nicht unterstützt
Canvas-Apps — nur YAML-Format .msapp binär unter canvasapps/<name>/; wird im XML-Format nicht unterstützt
Umgebungsvariablendefinitionen • XML-Dateien Einzelne .xml Dateien unter environmentvariabledefinitions/
Umgebungsvariablenwerte • JSON-Datei Gespeichert als environment_variable_values.json
Benutzerdefinierte Konnektoren Unter connectors/
Plug-In-Assemblys Vollqualifizierte Typnamen werden standardmäßig neu zugeordnet (/remapPluginTypeNames)
Webressourcen Unter webresources/
Sicherheitsrollen Intern als XML gespeichert; pro Lösung gefiltert
Optionssätze (global) Als XML gespeichert; pro Lösung gefiltert
Dashboards Als XML gespeichert; pro Lösung gefiltert
Siteübersicht Als XML gespeichert; pro Lösung gefiltert
Menübandanpassungen Als XML gespeichert; pro Lösung gefiltert
Entitätsbeziehungen Unter entityrelationships/

Hinweis

Komponenten, die intern als XML gespeichert sind, werden automatisch während der Pack- und Entpackvorgänge zwischen XML und YAML konvertiert. Sie können sie als YAML-Dateien erstellen; das Tool behandelt die Konvertierung.

Repositorys mit mehreren Lösungen

Ein einzelner Repositorystamm kann mehrere Lösungen enthalten. Alle Lösungen verwenden dieselben Komponentenordner; solutioncomponents.yml in jeder Lösung steuert, welche Komponentenpfade zu dieser Lösung gehören.

Beispielstruktur mit zwei Lösungen:

<repositoryRoot>/
├── solutions/
│   ├── SolutionA/
│   │   ├── solution.yml
│   │   ├── solutioncomponents.yml    ← references entities/account, entities/contact
│   │   ├── rootcomponents.yml
│   │   └── missingdependencies.yml
│   └── SolutionB/
│       ├── solution.yml
│       ├── solutioncomponents.yml    ← references entities/lead, workflows/myflow
│       ├── rootcomponents.yml
│       └── missingdependencies.yml
├── publishers/
│   └── SharedPublisher/
│       └── publisher.yml
├── entities/
│   ├── account/
│   ├── contact/
│   └── lead/
└── workflows/
    └── myflow/

Packen einer bestimmten Lösung aus einem Mehrlösungsordner

Verwenden von SolutionPackager.exe:

SolutionPackager.exe /action:Pack /zipfile:SolutionA.zip /folder:C:\repos\myrepo /SolutionName:SolutionA

Verwenden pac solution pack (nur Einzellösungsordner – verwenden Sie für mehrere Lösungen SolutionPackager.exe direkt mit /SolutionName):

pac solution pack --zipfile SolutionA.zip --folder C:\repos\myrepo

Hinweis

Bei Verwendung der nativen Dataverse Git-Integration in die Umgebungsbindung teilen alle Lösungen in der Umgebung einen einzelnen Repositorystamm mithilfe des Layouts für mehrere Lösungen. Bei Verwendung der Lösungsbindung kann jede Lösung an einen separaten Ordner gebunden werden.

Arbeiten mit YAML-Formatordnern

Packen eines YAML-Ordners in eine .zip Datei

# Using pac CLI (single solution in folder)
pac solution pack --zipfile C:\output\MySolution.zip --folder C:\repos\myrepo

# Using SolutionPackager.exe directly (also works for multi-solution with /SolutionName)
SolutionPackager.exe /action:Pack /zipfile:C:\output\MySolution.zip /folder:C:\repos\myrepo

Abrufen eines vollständigen YAML-Ordners von Dataverse

Die empfohlene Methode zum Abrufen eines vollständigen, packbaren YAML-Ordners ist die Verwendung pac solution clone:

pac solution clone --name MySolutionUniqueName --outputDirectory C:\repos\myrepo

Dadurch wird die Lösung in das YAML-Format extrahiert, einschließlich aller Komponentenquelldateien. Alternativ können Sie die native Git-Integration verwenden, um von Power Apps zu übernehmen – die zugesicherten Dateien sind im YAML-Format und vollständig packbar.

Überprüfen des Ordners vor dem Packen

Überprüfen Sie, ob der solutions/<name>/ Ordner vorhanden ist und dass alle Pfade in solutioncomponents.yml tatsächliche Dateien aufgelöst werden. Fehlende Pfade führen zu Warnungen während des Pakets, und diese Komponenten werden weggelassen.

Beziehung zur Dataverse Git-Integration

Das YAML-Quellcodeverwaltungsformat ist das kanonische Format, das von der Dataverse Git-Integration verwendet wird. Wenn Hersteller Lösungen von Power Apps übernehmen, verwenden die Dateien, die in Azure DevOps geschrieben wurden, dieses Format. Code-First-Entwickler können mit demselben Repository mit den hier beschriebenen CLI-Tools arbeiten.

Informationen zum Verbinden von Umgebungen mit Git finden Sie unter Dataverse Git-Integrationssetup.