Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellen Sie früh gebundene Klassen für Ihre .NET-Projekte:
- Verbessert die Lesbarkeit und Wartbarkeit des Codes.
- Verringert das Risiko von Fehlern, da sie eine Typprüfung zur Kompilierzeit ermöglichen.
- Verbessert die Produktivität der Entwickler, da Entwickler Mithilfe von IntelliSense Tabellen, Spalten und Auswahloptionen entdecken können.
- Stellt die OrganizationServiceContext-Klasse bereit, damit Sie Dataverse-Abfragen mithilfe von LINQ schreiben und andere Funktionen zum Arbeiten mit Daten nutzen können.
Erfahren Sie mehr:
Verwenden Sie den Power Platform CLI pac modelbuilder build-Befehl, um Early-Bound-Codeklassen zu generieren. Sie können auch das CrmSvcUtil.exe Code-Generierungstool verwenden, aber für Dataverse empfehlen wir die Verwendung des pac modelbuilder build Befehls.
Erfahren Sie, wie Sie CrmSvcUtil.exe verwenden, um früh gebundene Klassen für das SDK für .NET zu generieren
Wie viele Power Platform CLI-Befehle verfügt pac modelbuilder build über viele Parameter, mit denen Sie das Ergebnis steuern können. In diesem Artikel empfehlen wir Ihnen, für die meisten Anwendungsfälle zunächst den Parameter --settingsTemplateFile zu verwenden. Verwenden Sie diesen Parameter, um auf eine JSON-Datei zu verweisen, in der Sie alle anderen verfügbaren Einstellungen steuern können. Auf diese Weise müssen Sie keine lange Liste von Parametern erstellen, und Sie können die für Ihr Projekt geeignete Konfiguration aktualisieren, um die Regeneration der Klassen zu ermöglichen, wenn Sie sie benötigen.
Sie können den Buildbefehl weiterhin mit Parametern verwenden, wenn Sie dies bevorzugen. Siehe Parameter verwenden.
Starten Sie
Bevor Sie beginnen:
- Power Platform-CLI installieren.
- Stellen Sie eine Verbindung mit Ihrer Umgebung her, indem Sie Power Platform CLI-Pac-Authentifizierungsbefehle verwenden.
Verwenden Sie für den Einstieg die folgenden Schritte:
Fügen Sie in Ihrem .NET-Projekt einen NuGet Paketverweis auf Folgendes hinzu:
- Für eine Clientanwendung: Microsoft.PowerPlatform.Dataverse.Client
- Für ein Dataverse Plug-In-Projekt: Microsoft.CrmSdk.CoreAssemblies
Einen Ordner namens
modelerstellen.Fügen Sie im Ordner
modeleinebuilderSettings.jsonDatei mit den folgenden Einstellungen hinzu:{ "emitentityetc-comment": "Generate a constants structure that contains all of the field names by entity at the time of code generation.", "emitEntityETC": false, "emitfieldsclasses-comment": "Generate a constants structure that contains all of the field names by entity at the time of code generation.", "emitFieldsClasses": false, "emitvirtualattributes-comment": "When set, includes the Virtual Attributes of entities in the generated code.", "emitVirtualAttributes": false, "entitynamesfilter-comment": "Filters the list of entities are retrieved when reading data from Dataverse.", "entityNamesFilter": [ "account", "contact" ], "entitytypesfolder-comment": "Folder name that contains entities.", "entityTypesFolder": "Entities", "generateGlobalOptionSets-comment": "Emit all Global OptionSets. Note: If an entity contains a reference to a global optionset, it is emitted even if this switch is not present.", "generateGlobalOptionSets": false, "generatesdkmessages-comment": "When set, emits Sdk message classes as part of code generation", "generateSdkMessages": true, "language-comment": "The language to use for the generated proxy code. This value can be either 'CS' or 'VB'. The default language is 'CS'.", "language": "CS", "logLevel-comment": "Log level. The default value is 'Off'.", "logLevel": "Off", "messagenamesfilter-comment": "Filters the list of messages that are retrieved when reading data from Dataverse.", "messageNamesFilter": [ "searchautocomplete", "searchquery", "sample_*" ], "messagestypesfolder-comment": "Folder name that contains messages.", "messagesTypesFolder": "Messages", "namespace-comment": "The namespace for the generated code.", "namespace": "ExampleProject", "optionsetstypesfolder-comment": "Folder name that contains option sets.", "optionSetsTypesFolder": "OptionSets", "serviceContextName-comment": "The name for the generated service context. If a value is passed in, it's used for the Service Context. If not, no Service Context is generated.", "serviceContextName": "OrgContext", "suppressGeneratedCodeAttribute-comment": "When set, this suppress all generated objects being tagged with the code generation engine and version", "suppressGeneratedCodeAttribute": true, "suppressINotifyPattern-comment": "When enabled, doesn't write the INotify wrappers for properties and classes.", "suppressINotifyPattern": true }Anmerkung
Diese Datei ist eine geänderte Version der Datei, die Sie mithilfe
pac modelbuilder builddes--writesettingsTemplateFileParameters generieren können. Erfahren Sie, wie Sie die Datei ohne Kommentare in mithilfe von Parametern erstellen.Verwenden Sie den folgenden Befehl, um früh gebundene Klassen für die verbundene Umgebung mithilfe der in
builderSettings.jsonder Datei definierten Einstellungen zu generieren. DerC:\projects\exampleproject\Pfad stellt den Pfad zu Ihrem Projekt dar undmodelist der von Ihnen erstellte Ordner.PS C:\projects\exampleproject\model> pac modelbuilder build -o . -stf .\builderSettings.jsonDieser Befehl verwendet diese Parameter:
-
-oKurzform für den erforderlichen--outdirectory-Parameter mit dem Wert., um das aktuelle Verzeichnis anzugeben. -
-stfKurzform für den--settingsTemplateFile-Parameter mit dem Wert.\builderSettings.json, um dasbuilderSettings.jsonaktuelle Verzeichnis anzugeben.
Sie können diesen Befehl auch aus dem
exampleprojectVerzeichnis verwenden:PS C:\projects\exampleproject>pac modelbuilder build -o model -stf model\builderSettings.json-
Verstehen Sie, welche Dateien geschrieben werden
Mit beiden Befehlen erhalten Sie die folgende Ausgabe:
Connected to... Your Organization
Connected as you@yourorganization.onmicrosoft.com
Begin reading metadata from MetadataProviderService
Begin Reading Metadata from Server
Read 2 Entities - 00:00:00.732
Read 0 Global OptionSets - 00:00:00.000
Read 12 SDK Messages - 00:00:00.889
Completed Reading Metadata from Server - 00:00:01.694
Completed reading metadata from MetadataProviderService - 00:00:01.697
Begin Writing Code Files
Processing 2 Entities
Wrote 2 Entities - 00:00:00.0625873
Processing 12 Messages
Wrote 3 Message(s). Skipped 9 Message(s) - 00:00:00.0091589
Processing 0 Global OptionSets
Wrote 0 Global OptionSets - 00:00:00.0000045
Code written to C:\projects\exampleproject\model\Entities\account.cs.
Code written to C:\projects\exampleproject\model\Entities\contact.cs.
Code written to C:\projects\exampleproject\model\Messages\searchquery.cs.
Code written to C:\projects\exampleproject\model\Messages\searchautocomplete.cs.
Code written to C:\projects\exampleproject\model\OrgContext.cs.
Code written to C:\projects\exampleproject\model\EntityOptionSetEnum.cs.
Completed Writing Code Files - 00:00:00.116
Generation Complete - 00:00:01.815
PS C:\projects\exampleproject\model>
Wenn Sie die Ausgabe prüfen, sehen Sie, dass nur Klassen für die Tabellen generiert werden, die durch entityNamesFilter angegeben sind, und nur die Nachrichten, die in messageNamesFilter angegeben sind. Geben Sie an, welche Tabellen (Entitäten) und Meldungen Sie in Ihrem Projekt verwenden. Andernfalls generiert der Befehl Klassen für alle Tabellen und Nachrichten.
Verwenden Sie für * in diesen Werten messageNamesFilter als Platzhalterzeichen. Dieser Filter ist nützlich, wenn Nachrichten in Ihrer Lösung ein gemeinsames Anpassungspräfix aufweisen.
pac modelbuilder build schreibt die Dateien in Ordner mit Namen, die Sie in der Einstellungsdatei steuern:
- Entitätsklassen wechseln zu dem durch die
entityTypesFolderEinstellung angegebenen Ordner. - Nachrichtenklassen wechseln zu dem durch die
messagesTypesFolderEinstellung angegebenen Ordner. - Die OrganizationServiceContext-Klasse wechselt zu einer Datei mit dem durch die
serviceContextNameEinstellung angegebenen Namen. - Alle Klassen sind Teil des Namespace, den Sie in der Einstellung
namespacefestgelegt haben.
Anmerkung
Wenn Sie Nachrichtenklassen generieren, fügen Sie immer einen Namen für die serviceContextName Einstellung ein. Siehe Einschließen serviceContextName beim Generieren von Nachrichtenklassen.
So erscheinen die Dateien und Ordner in Visual Studio:
Nachdem diese Dateien in Ihr Projekt geschrieben wurden, können Sie nun früh gebundene Klassen verwenden.
Wenn Sie sie ändern möchten, löschen Sie die Dateien im model Order außer builderSettings.json, und ändern Sie die Einstellungen in builderSettings.json und generieren Sie sie erneut.
Parameter verwenden
Sie müssen die builderSettings.json Einstellungsdatei oder den --settingsTemplateFile Parameter mit pac modelbuilder build nicht verwenden. Sie können den Befehl mithilfe von Parametern direkt aufrufen. Referenzdokumentation und Beispiele finden Sie in der Referenzdokumentation zum Pac-Modellbuilder.
Wenn Sie die Einstellungsdatei builderSettings.json und den --settingsTemplateFile Parameter verwenden, können Sie Befehlszeilenparameter verwenden, um diese Einstellungen außer Kraft zu setzen.
Hier ist ein Beispiel, das zeigt, wie Dateien mithilfe der gleichen Einstellungen wie das Beispiel im Abschnitt "Erste Schritte " mithilfe von Parametern generiert werden:
PS C:\>pac modelbuilder build `
--outdirectory C:\projects\exampleproject\model `
--entitynamesfilter 'account;contact' `
--generatesdkmessages `
--messagenamesfilter 'searchautocomplete;searchquery;sample_*' `
--namespace ExampleProject `
--serviceContextName OrgContext `
--suppressGeneratedCodeAttribute `
--suppressINotifyPattern `
--writesettingsTemplateFile
Dieses Beispiel enthält nicht alle Einstellungen, da die Standardoptionen verwendet werden. Wenn Sie den --writesettingsTemplateFile Parameter zum Generieren einer builderSettings.json Datei verwenden, werden die Kommentare im Beispiel im Abschnitt erste Schritte nicht berücksichtigt. Im Beispiel, in dem Parameter verwendet werden, wird die folgende builderSettings.json Datei in den model Ordner geschrieben:
{
"suppressINotifyPattern": true,
"suppressGeneratedCodeAttribute": true,
"language": "CS",
"namespace": "ExampleProject",
"serviceContextName": "OrgContext",
"generateSdkMessages": true,
"generateGlobalOptionSets": false,
"emitFieldsClasses": false,
"entityTypesFolder": "Entities",
"messagesTypesFolder": "Messages",
"optionSetsTypesFolder": "OptionSets",
"entityNamesFilter": [
"account",
"contact"
],
"messageNamesFilter": [
"searchautocomplete",
"searchquery",
"sample_*"
],
"emitEntityETC": false,
"emitVirtualAttributes": false
}
Beim Generieren von Nachrichtenklassen serviceContextName einschließen
Wenn Sie Nachrichtenklassen generieren, fügen Sie immer einen Namen für den serviceContextName Parameter ein, damit eine OrganizationServiceContext-Klasse mit Ihrem Code generiert wird.
Diese Klasse enthält eine wichtige Eigenschaft, um die Verwendung generierter Nachrichtenklassen zu ermöglichen. Wenn Sie kein OrganizationServiceContext einfügen, erhalten Sie beim Versuch, die generierten Nachrichtenklassen zu verwenden, die folgende Fehlermeldung.
The formatter threw an exception while trying to deserialize the message:
There was an error while trying to deserialize parameter http://schemas.microsoft.com/xrm/2011/Contracts/Services:request.
The InnerException message was 'Error in line 1 position 700. Element 'http://schemas.microsoft.com/xrm/2011/Contracts/Services:request' contains data from a type that maps to the name 'http://schemas.microsoft.com/xrm/2011/new/:<your generated class name>'.
The deserializer has no knowledge of any type that maps to this name.
Consider changing the implementation of the ResolveName method on your DataContractResolver to return a non-null value for name '<your generated class name>' and namespace 'http://schemas.microsoft.com/xrm/2011/new/'.'.
Please see InnerException for more details.
Community-Werkzeuge
Der Early Bound Generator V2 ist ein XrmToolBox-Plug-In, das von der Community erstellt wurde, um eine Benutzeroberfläche bereitzustellen, die die richtige builderSettings.json Datei generiert, und ruft den pac modelbuilder build Befehl für den Benutzer auf. Da die Benutzeroberfläche nur die builderSettings.json Datei generiert und den pac modelbuilder build Befehl aufruft, können Sie den Befehl trotzdem ohne Abhängigkeit von der XrmToolBox in einer Pipeline ausführen. Das Plugin bietet auch Konfigurationsoptionen, die pac modelbuilder nicht bietet. So lässt sich beispielsweise die Groß- und Kleinschreibung von Klassen und Eigenschaften sowie die sprachspezifische Transliteration von Zeichen explizit steuern. Early Bound Generator V2 kann dies mithilfe der Erweiterungsfunktionen von pac modelbuilder.
Anmerkung
Microsoft erweitert keine Unterstützung für von der Community entwickelte Tools. Wenn Sie Fragen zum Tool haben, wenden Sie sich an den Herausgeber. Weitere Informationen finden Sie unter XrmToolBox.
Für Dynamics 365 Customer Engagement (lokal)
Das Power Platform CLI ist für Dynamics 365 Customer Engagement lokal nicht verfügbar. Sie müssen das CrmSvcUtil.exe Codegenerierungstool verwenden, um früh gebundene Klassen zu generieren.
Erfahren Sie, wie Sie CrmSvcUtil.exe verwenden, um früh gebundene Klassen für das SDK für .NET zu generieren
Ähnliche Artikel
Spät gebundene und früh gebundene Programmierung
Beispiel: Tabellenoperationen mit früher Bindung
Entwicklertools und -ressourcen
Dataverse-Entwicklungswerkzeuge
Erfahren Sie, wie Sie CrmSvcUtil.exe verwenden, um früh gebundene Klassen für das SDK für .NET zu generieren