Creare pacchetti per lo strumento Package Deployer

Package Deployer consente agli amministratori di distribuire pacchetti nelle istanze di Microsoft Dataverse. Un pacchetto Package Deployer può essere dato da uno o tutti i seguenti elementi:

  • Uno o più file di soluzione di Dataverse.
  • File flat o file di dati di configurazione esportati dallo strumento di migrazione della configurazione. Per ulteriori informazioni sullo strumento, vedi Spostare i dati di configurazione tra le istanze e le organizzazioni con lo strumento di migrazione della configurazione.
  • Codice personalizzato che può essere eseguito prima, durante o dopo la distribuzione dell'istanza di Dataverse.
  • Contenuto HTML specifico del pacchetto che può essere visualizzato all'inizio e alla fine del processo di distribuzione. Questo contenuto può essere utile per fornire una descrizione delle soluzioni e dei file distribuiti nel pacchetto.

Nota

C'è un altro tipo di pacchetto chiamato pacchetto di plug-in. Questo tipo di pacchetto è per assembly dipendenti dal plug-in e non ha alcuna relazione con i pacchetti Package Deployer.

Prerequisiti

  • Assicurati di aver preparato tutte le soluzioni e altri file che desideri includere nel pacchetto.
  • Visual Studio 2019 o versioni successive oppure Visual Studio Code.

Panoramica processo

Per creare un pacchetto Package Deployer, esegui i passaggi seguenti.

  • Creare un progetto Visual Studio o MSBuild
  • Aggiungi soluzioni e altri file al progetto
  • Aggiorna i file HTML forniti (facoltativo)
  • Specifica i valori di configurazione per il pacchetto
  • Definisci il codice personalizzato per il pacchetto
  • Creazione e sviluppo del pacchetto

Questi passaggi sono descritti in dettaglio in questo articolo.

Creare un progetto per il pacchetto

Il primo passaggio è creare un progetto Visual Studio o MSBuild per il pacchetto. Per farlo, devi avere una delle due estensioni dello strumento disponibili installata sul tuo computer di sviluppo. Se utilizzi Visual Studio Code, installa Microsoft Power Platform CLI. Altrimenti, se usi Visual Studio 2019, installa gli Power Platform Tools per Visual Studio. L'estensione Power Platform Tools è attualmente disponibile solo per Visual Studio 2019. Tuttavia, il progetto creato può essere costruito utilizzando Visual Studio 2019 o versione successiva.

Seleziona la scheda appropriata di seguito per scoprire come creare un progetto utilizzando l'estensione dello strumento desiderata. Entrambi gli strumenti generano il progetto in un formato simile.

Esegui il comando pac package init per creare il pacchetto iniziale. Maggiori informazioni: pac package

pac package init help
pac package init --outputDirectory DeploymentPackage

L'output dell'interfaccia della riga di comando risultante contiene le cartelle ei file mostrati di seguito. Il nome della cartella "DeploymentPackage" è stato utilizzato qui come esempio.

C:.
└───DeploymentPackage
    │   DeploymentPackage.csproj
    │   PackageImportExtension.cs
    │
    └───PkgAssets
            ImportConfig.xml
            manifest.ppkg.json

Nel progetto creato, trova il file di configurazione ImportConfig.xml nella cartella PkgAssets e il file PackageImportExtension.cs. Modificherai questi file come descritto più avanti in questo articolo.

Aggiungere file pacchetto

Dopo aver creato un progetto di pacchetto, puoi iniziare ad aggiungere soluzioni e altri file a quel progetto.

Quando si utilizza l'interfaccia della riga di comando, è possibile aggiungere pacchetti, soluzioni e riferimenti al progetto del pacchetto esterni utilizzando uno dei comandi secondari Aggiungi. Immettere pac package help per visualizzare l'elenco dei comandi secondari. Aggiungiamo una soluzione al nostro pacchetto.

> pac package add-solution help

Commands:
Usage: pac package add-solution --path [--import-order] [--skip-validation] [--publish-workflows-activate-plugins] [--overwrite-unmanaged-customizations] [--import-mode] [--missing-dependency-behavior] [--dependency-overrides]

> cd .\DeploymentPackage\
> pac package add-solution --path ..\TestSolution_1_0_0_1_managed.zip

The item was added successfully.

Configurare il pacchetto

  1. Definisci la configurazione del pacchetto aggiungendo informazioni sul pacchetto nel file ImportConfig.xml, nel progetto. Apri il file per la modifica. Nell'elenco seguente sono elencate le informazioni su ciascun parametro e nodo presente nel file di configurazione.

    installsampledata
    True o false. Se true, installa i dati di esempio nell'istanza di Dataverse. Sono gli stessi dati di esempio che puoi installare dall'area Impostazioni>Gestione dati in Dataverse.

    waitforsampledatatoinstall
    True o false. Se restituisce true e, se anche installsampledata è impostata su true, attende l'installazione dei dati di esempio prima di distribuire il pacchetto.

    Nota

    Assicurarsi di impostare installsampledata su true per impostare waitforsampledatatoinstall su true.

    agentdesktopzipfile
    Nome del file ZIP da decomprimere. Se si specifica un nome del file ZIP in questa posizione, viene aggiunge una schermata durante il processo di distribuzione del pacchetto in cui viene richiesto di selezionare la posizione desiderata per decomprimere il contenuto del file.

    Questo attributo è comunemente usato per creare pacchetti per Unified Service Desk per Dynamics 365. Per ulteriori informazioni su Unified Service Desk, consulta Guida per gli sviluppatori di Unified Service Desk 3.0.

    agentdesktopexename
    Nome del file .exe o .msi nel file ZIP o un URL da richiamare al termine del processo di distribuzione.

    Questo attributo è comunemente usato per creare pacchetti per Unified Service Desk.

    crmmigdataimportfile
    Nome del file di dati di configurazione predefinito (.zip) esportato utilizzando lo strumento di migrazione della configurazione.

    • Puoi inoltre importare una versione localizzata del file di dati di configurazione in base all'ID delle impostazioni locali (LCID) specificato tramite le nuove impostazioni di runtime quando esegui Package Deployer. Utilizza il nodo <cmtdatafile> (spiegato più avanti) per specificare le versioni localizzate del file di dati di configurazione in un pacchetto e quindi utilizza il metodo OverrideConfigurationDataFileLanguage (spiegato più avanti) per specificare la logica per importare il file di dati di configurazione in base all'ID delle impostazioni locali specificato tramite le impostazioni di runtime. Non è possibile importare più di un file di dati di configurazione alla volta utilizzando un pacchetto.

    • Per Dataverse (locale), se il file di dati di configurazione contiene informazioni utente e le istanze di Dataverse di origine e di destinazione si trovano nello stesso dominio Active Directory, le informazioni utente vengono importante nell'istanza Dataverse di destinazione. Per importare le informazioni utente in un'istanza di Dataverse (locale) in un dominio diverso, devi includere il file di mapping dell'utente (con estensione xml) generato utilizzando lo strumento di configurazione della migrazione nel progetto e specificarlo con il file di dati di configurazione utilizzando l'attributo usermapfilename nel nodo <cmtdatafile> spiegato di seguito. Le informazioni utente non possono essere importate nelle istanze di Dataverse.
      Nodo <solutions>
      Contiene una matrice di nodi <configsolutionfile> che descrivono le soluzioni da importare. L'ordine delle soluzioni in questo nodo indica l'ordine in cui le soluzioni verranno importate nell'istanza Dataverse di destinazione.

      Nodo <configsolutionfile>
      Utilizza questo nodo nel nodo <solutions> per specificare le singole soluzioni e le informazioni seguenti per ogni soluzione da importare: 

    • solutionpackagefilename: specifica il nome del file con estensione zip della soluzione. Obbligatorio.

    • overwriteunmanagedcustomizations: specifica se sovrascrivere eventuali personalizzazioni non gestite durante l'importazione di una soluzione già esistente nell'istanza di Dynamics 365 di destinazione. Questo attributo è facoltativo e se non lo specifichi, per impostazione predefinita le personalizzazioni non gestite nella soluzione esistenti vengono gestite nell'istanza di Dynamics 365 di destinazione.

    • publishworkflowsandactivateplugins: specifica se pubblicare i flussi di lavoro e attivare i plug-in nell'istanza di Dynamics 365 di destinazione dopo aver importato la soluzione. Questo attributo è facoltativo e se non lo specifichi, per impostazione predefinita i flussi di lavoro sono pubblicati e i plug-in sono attivati dopo aver importato la soluzione nell'istanza di Dynamics 365 di destinazione.

      È possibile aggiungere più nomi di file della soluzione in un pacchetto aggiungendo tutti i nodi <configsolutionfile>. Ad esempio, se desideri importare tre file della soluzione, aggiungili come mostrato di seguito:

    
    <solutions>  
    <configsolutionfile solutionpackagefilename="SampleSolutionOne_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionTwo_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionThree_1_0_managed.zip" />  
    </solutions>  
    
    

    Nodo <filestoimport>
    Contiene una matrice di nodi <configimportfile> e <zipimportdetails> utilizzati per descrivere rispettivamente i singoli file e i file ZIP da importare.

    Nodo <configimportfile>
    Utilizzare questo nodo nel nodo <configimportfile> per descrivere un file da importare in Dataverse. È possibile aggiungere più file in un pacchetto aggiungendo tutti i nodi <configimportfile>.

    
    <filestoimport>  
    <configimportfile filename="File.csv"  
    filetype="CSV"  
    associatedmap="FileMap"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true" />  
    <configimportfile filename="File.zip"  
    filetype="ZIP"  
    associatedmap="FileMapName"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true"/>  
    
    </filestoimport>  
    
    

    Di seguito è riportato un elenco di attributi supportati:

    Attributo Description
    filename Nome del file contenente i dati di importazione. Se si tratta di un file ZIP, un nodo <zipimportdetails> deve essere presente con un nodo <zipimportdetail> per ogni file contenuto nel file ZIP.
    filetype Questo valore può essere csv, xml o zip.
    associatedmap Nome del mapping dei dati di importazione di Dataverse da utilizzare con questo file. Se è vuoto, tenta di utilizzare il nome del mapping dei dati di importazione determinato dal sistema per il file.
    importtoentity Può essere il nome del file EXE nel file ZIP, un URL o un file MSI utilizzato per fornire un collegamento da richiamare al termine del processo.
    datadelimiter Nome del delimitatore dei dati utilizzato nel file di importazione. I valori validi sono virgoletta singola o virgolette doppie.
    fielddelimiter Nome del delimitatore dei campi utilizzato nel file di importazione. I valori validi sono virgola o due punti o virgoletta singola.
    enableduplicatedetection Indica se abilitare le regole di rilevamento dei duplicati sull'importazione dei dati. I valori validi sono true o false.
    isfirstrowheader Viene utilizzato per indicare che la prima riga del file di importazione contiene i nomi dei campi. I valori validi sono true o false.
    isrecordownerateam Indica se il proprietario del record nell'importazione deve essere un team. I valori validi sono true o false.
    owneruser Indica l'ID utente che dovrà essere proprietario dei record. Il valore predefinito è l'utente attualmente connesso.
    waitforimporttocomplete Se true, il sistema attende il completamento dell'importazione prima di procedere. Se false, aggiunge i processi alla coda e continua.

    Nodo <zipimportdetails>
    Questo nodo contiene una matrice di nodi <zipimportdetail> che descrivono i file inclusi in un file ZIP utilizzato per l'importazione in Dynamics 365.

    Nodo <zipimportdetail>
    Utilizzare questo nodo nel nodo <zipimportdetails> per fornire informazioni su un singolo file in un file ZIP specificato nel nodo <configimportfile>.

    <filestoimport>  
    ...  
    ...  
    <zipimportdetails>  
    <zipimportdetail filename="subfile1.csv" filetype="csv" importtoentity="account" />  
    <zipimportdetail filename="subfile2.csv" filetype="csv" importtoentity="contact" />  
    </zipimportdetails>  
    </filestoimport>  
    
    

    Di seguito è riportato un elenco di attributi supportati:

    Attributo Description
    filename Nome del file contenente i dati di importazione.
    filetype Questo valore può essere csv o xml.
    importtoentity Può essere il nome del file EXE nel file ZIP, un URL o un file MSI utilizzato per fornire un collegamento da richiamare al termine del processo.

    Nodo <filesmapstoimport>
    Questo nodo contiene una matrice di nodi <configmapimportfile> da importare. L'ordine dei file di mapping in questo nodo indica l'ordine in cui vengono importati. Per informazioni sulle mappe dei dati, vedi Creare mappe di dati per l'importazione.

    Nodo <configimportmapfile>
    Utilizzare questo nodo nel nodo <filesmapstoimport> per fornire informazioni su un singolo file di mapping da importare in Dataverse.

    <filesmapstoimport>  
    <configimportmapfile filename="FileMap.xml" />  
    </filesmapstoimport>  
    

    Nodo <cmtdatafiles>
    Questo nodo contiene una matrice di nodi <cmtdatafile> che contiene la versione localizzata del file di dati di configurazione da importare.

    Nodo <cmtdatafile>
    Utilizza il nodo nel nodo <cmtdatafiles> per specificare i file di dati di configurazione localizzati e l'ID delle impostazioni locali (obbligatorio) e il file di mapping delle informazioni utente (facoltativo). Ad esempio:

    <cmtdatafiles>  
    <cmtdatafile filename="data_1033.zip" lcid="1033" usermapfilename="UserMap.xml" />  
    <cmtdatafile filename="data_1041.zip" lcid="1041" usermapfilename="" />  
    </cmtdatafiles>  
    

    Puoi definire la logica personalizzata nel metodo OverrideConfigurationDataFileLanguage (spiegato più avanti) per importare un file di dati di configurazione localizzato anziché quello predefinito (specificato in crmmigdataimportfile) in base al valore ID delle impostazioni locali (LCID) specificato tramite le impostazioni di runtime (illustrate in seguito).

  2. Selezionare Salva tutto.

    Il file xml seguente rappresenta i contenuti di un file ImportConfig.xml di esempio.

    <?xml version="1.0" encoding="utf-16"?>  
    <configdatastorage xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"  
    xmlns:xsd="https://www.w3.org/2001/XMLSchema"  
    installsampledata="true"  
    waitforsampledatatoinstall="true"  
    agentdesktopzipfile=""  
    agentdesktopexename=""  
    crmmigdataimportfile="data_1033.zip">  
    <solutions>  
    <configsolutionfile solutionpackagefilename="SampleSolutionOne_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionTwo_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionThree_1_0_managed.zip" />  
    </solutions>  
    <filestoimport>  
    <configimportfile filename="SampleOption.csv"  
    filetype="CSV"  
    associatedmap="SampleOption"  
    importtoentity="sample_option"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="false"/>  
    <configimportfile filename="File.zip"  
    filetype="ZIP"  
    associatedmap="FileMapName"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true"/>  
    <zipimportdetails>  
    <zipimportdetail filename="subfile1.csv"  
    filetype="csv"  
    importtoentity="account" />  
    <zipimportdetail filename="subfile2.csv"  
    filetype="csv"  
    importtoentity="contact" />  
    </zipimportdetails>  
    </filestoimport>  
    <filesmapstoimport>  
    <configimportmapfile filename="SampleOption.xml" />  
    </filesmapstoimport>  
    <cmtdatafiles>  
    <cmtdatafile filename="data_1033.zip"  
    lcid="1033"  
    usermapfilename="UserMap.xml" />  
    <cmtdatafile filename="data_1041.zip"  
    lcid="1041"  
    usermapfilename="" />  
    </cmtdatafiles>  
    </configdatastorage>  
    
    

Aggiungi codice personalizzato

È possibile aggiungere codice personalizzato che viene eseguito prima, durante e dopo l'importazione del pacchetto in un ambiente. A tale scopo, segui le istruzioni riportate di seguito.

  1. Modifica il file PackageTemplate.cs (o PackageImportExtension.cs) nella cartella principale del progetto.

  2. Nel file C# è possibile:

    1. Immettere il codice personalizzato da eseguire quando il pacchetto viene inizializzato nella definizione del metodo di override di InitializeCustomExtension.

      Questo metodo può essere utilizzato per consentire agli utenti di utilizzare i parametri di runtime durante l'esecuzione di un pacchetto. Come sviluppatore puoi aggiungere supporto per tutti i parametri di runtime al pacchetto utilizzando la proprietà RuntimeSettings se disponi di un codice per elaborarlo in base all'input dell'utente.

      Ad esempio, il seguente codice di esempio abilita un parametro di runtime chiamato SkipChecks per il pacchetto con due possibili valori: true o false. Il codice di esempio controlla se l'utente ha specificato i parametri di runtime durante l'esecuzione di Package Deployer (utilizzando la riga comandi o PowerShell) e quindi di conseguenza elabora le informazioni. Se non è stato specificato nessun parametro runtime dall'utente mentre esegue il pacchetto, il valore della proprietà RuntimeSettings sarà null.

      public override void InitializeCustomExtension()  
      {  
      // Do nothing.  
      
      // Validate the state of the runtime settings object.  
      if (RuntimeSettings != null)  
      {  
      PackageLog.Log(string.Format("Runtime Settings populated.  Count = {0}", RuntimeSettings.Count));  
      foreach (var setting in RuntimeSettings)  
      {  
      PackageLog.Log(string.Format("Key={0} | Value={1}", setting.Key, setting.Value.ToString()));  
      }  
      
      // Check to see if skip checks is present.  
      if ( RuntimeSettings.ContainsKey("SkipChecks") )  
      {  
      bool bSkipChecks = false;  
      if (bool.TryParse((string)RuntimeSettings["SkipChecks"], out bSkipChecks))  
      OverrideDataImportSafetyChecks = bSkipChecks;  
      }  
      }  
      else  
      PackageLog.Log("Runtime Settings not populated");  
      }  
      

      Questo codice consente all'amministratore di utilizzare la riga di comando oppure il cmdlet Import-CrmPackage per specificare se ignorare i controlli di sicurezza durante l'esecuzione di Package Deployer per importare il pacchetto. Altre informazioni: Distribuire pacchetti con Package Deployer e Windows PowerShell

    2. Immetti il codice personalizzato da eseguire prima che vengano importate le soluzioni nella definizione del metodo di sovrascrittura di PreSolutionImport per specificare se mantenere o sovrascrivere le personalizzazioni mentre si aggiorna la soluzione specificata in un'istanza Dataverse di destinazione e se attivare automaticamente i plug-in e i flussi di lavoro.

    3. Utilizza la definizione del metodo override di RunSolutionUpgradeMigrationStep per eseguire la trasformazione o l'aggiornamento dei dati tra due versioni di una soluzione. Questo metodo viene chiamato solo se la soluzione che stai importando è già presente nell'istanza Dataverse di destinazione.

      Questa funzione prevede i parametri seguenti:

      Parametro Descrizione
      solutionName Nome della soluzione.
      oldVersion Numero di versione della soluzione precedente.
      newVersion Numero di versione della nuova soluzione.
      oldSolutionId GUID della soluzione precedente.
      newSolutionId GUID della nuova soluzione.
    4. Immetti il codice personalizzato da eseguire prima che venga completata l'importazione della soluzione nella definizione di override del metodo BeforeImportStage. I dati di esempio e alcuni file flat per soluzioni specificate nel file ImportConfig.xml sono importati prima che venga completata l'importazione della soluzione.

    5. Sostituisci la lingua al momento selezionata per l'importazione dei dati di configurazione utilizzando la definizione del metodo di override di OverrideConfigurationDataFileLanguage. Se l'ID delle impostazioni locali specificato della lingua specificata non è disponibile nell'elenco delle lingue disponibili nel pacchetto, viene incluso il file dei dati predefinito.

      Specifica le lingue disponibili per i dati di configurazione nel nodo <cmtdatafiles> nel file ImportConfig.xml. Il file di importazione dei dati di configurazione predefinito è specificato nell'attributo crmmigdataimportfile nel file ImportConfig.xml.

      Ignorare i controlli dei dati (OverrideDataImportSafetyChecks = true) può essere efficace se sei sicuro che l'istanza Dataverse di destinazione non contenga alcun dato.

    6. Immetti il codice personalizzato da eseguire dopo il completamento dell'importazione nella definizione della sovrascrittura del metodo AfterPrimaryImport>. I file flat rimanenti che non sono stati importati in precedenza, prima dell'importazione della soluzione verranno ora importati.

    7. Modifica il nome predefinito della cartella del pacchetto al nome del pacchetto desiderato. A tale scopo, rinomina la cartella PkgFolder (o PkgAssets) nel riquadro Esplora soluzioni, quindi modifica il valore restituito nella GetImportPackageDataFolderName proprietà .

      public override string GetImportPackageDataFolderName  
      {  
      get  
      {  
      // WARNING this value directly correlates to the folder name in the Solution Explorer where the ImportConfig.xml and sub content is located.  
      // Changing this name requires that you also change the correlating name in the Solution Explorer  
      return "PkgFolder";  
      }  
      }  
      
    8. Modificare il nome del pacchetto modificando il valore restituito nella proprietà GetNameOfImport.

      public override string GetNameOfImport(bool plural)  
      {  
      return "Package Short Name";  
      }  
      

      Questo valore restituito è il nome del pacchetto che appare nella pagina di selezione del pacchetto nella creazione guidata di Dynamics 365 Package Deployer.

    9. Modificare la descrizione del pacchetto modificando il valore restituito nella proprietà GetImportPackageDescriptionText.

      
      public override string GetImportPackageDescriptionText  
      {  
      get { return "Package Description"; }  
      }  
      
      

      Questo valore restituito è la descrizione del pacchetto che appare insieme al nome del pacchetto nella pagina di selezione del pacchetto nella procedura guidata di Package Deployer.

    10. Modificare il nome esteso del pacchetto modificando il valore restituito nella proprietà GetLongNameOfImport.

      
      public override string GetLongNameOfImport  
      {  
      get { return "Package Long Name"; }  
      }  
      
      

      Il nome esteso del pacchetto viene visualizzato nella pagina successiva dopo aver selezionato il pacchetto da installare.

  3. Inoltre, per il pacchetto sono disponibili la funzione e le variabili seguenti:

    Nome Tipo Descrizione
    CreateProgressItem(String) Funzione Viene utilizzato per creare un nuovo elemento dello stato nell'interfaccia utente (IU).
    RaiseUpdateEvent(String, ProgressPanelItemStatus) Funzione Viene utilizzato per aggiornare lo stato creato dalla chiamata a CreateProgressItem(String).

    ProgressPanelItemStatus è un'enumerazione con i seguenti valori:

    In esecuzione = 0
    Completato = 1
    Non riuscito = 2
    Avviso = 3
    Sconosciuto = 4
    RaiseFailEvent(String, Exception) Function Viene utilizzato per l'importazione dello stato corrente non riuscita con la generazione di un messaggio di eccezione.
    IsRoleAssoicatedWithTeam(Guid, Guid) Funzione Viene utilizzato per determinare se un ruolo è associato a un team specificato.
    IsWorkflowActive(Guid) Funzione Viene utilizzato per determinare se un flusso di lavoro specificato è attivo.
    PackageLog Puntatore delle classi Un puntatore all'interfaccia di registrazione inizializzata per il pacchetto. Questa interfaccia viene utilizzata da un pacchetto per registrare i messaggi e le eccezioni nel file di registro del pacchetto.
    RootControlDispatcher Proprietà Un'interfaccia del dispatcher utilizzata per consentire il controllo per il rendering dell'interfaccia utente durante la distribuzione del pacchetto. Utilizzare questa interfaccia per eseguire il wrapping di eventuali elementi o comandi dell'interfaccia utente. È importante verificare questa variabile per rilevare la presenza di valori Null prima di utilizzarla, in quanto potrebbe non essere impostata su un valore.
    CrmSvc Proprietà Un puntatore alla classe CrmServiceClient che consente a un pacchetto di indirizzare Dynamics 365 dall'interno del pacchetto. Utilizza questo puntatore per eseguire i metodi SDK e altre operazioni nei metodi sottoposti a override.
    DataImportBypass Proprietà Specifica se Dynamics 365 Package Deployer ignora tutte le operazioni di importazione dei dati come l'importazione dei dati di esempio Dataverse e i dati esportati dallo strumento di migrazione della configurazione. Specifica vero o falso. Il valore predefinito è false.
    OverrideDataImportSafetyChecks Proprietà Specifica se Dynamics 365 Package Deployer ignora alcuni dei controlli di sicurezza. Ciò aiuta a migliorare le prestazioni di importazione. Specifica true o false. Il valore predefinito è false.

    È consigliabile impostare questa proprietà su true solo se l'istanza di destinazione di Dataverse non contiene alcun dato.
  4. Salvare il progetto. Il prossimo passaggio è la creazione del pacchetto.

Crea e distribuisci

Le sezioni seguenti descrivono come creare e distribuire un pacchetto.

Crea

La creazione del tuo pacchetto è descritta di seguito a seconda dello strumento che stai utilizzando.

Per compilare un pacchetto creato con la CLI, è possibile caricare il file .csproj in Visual Studio, ma in questa sede utilizzeremo il comando dotnet e MSBuild. L'esempio seguente presuppone che la directory di lavoro contenga il file *.csproj.

> dotnet publish

DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip

Puoi facoltativamente visualizzare i dettagli del pacchetto costruito.

> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip

Il pacchetto è costituito dai file seguenti nella cartella <Project>\Bin\Debug.

  • Cartella <PackageName>: il nome della cartella è lo stesso di quello modificato per il nome della cartella del pacchetto nel passaggio 2.g di questa sezione Aggiungi codice personalizzato. Questa contiene tutte le soluzioni, i dati di configurazione, i file flat e i contenuti per il pacchetto.

Nota

Potresti vedere una cartella .NET (ad esempio, net472) contenente una cartella pdpublish. La tua DLL e altri file di progetto si trovano in quella cartella pdpublish.

  • <PackageName>.dll: l'assembly include il codice personalizzato del pacchetto. Per impostazione predefinita, il nome dell'assembly è uguale al nome del progetto.

Distribuisci

Dopo aver creato un pacchetto, puoi distribuirlo nell'istanza di Dataverse utilizzando lo strumento Package Deployer, Windows PowerShell o un comando dell'interfaccia della riga di comando.

  • Per distribuire utilizzando lo strumento Package Deployer, scarica prima lo strumento come descritto in Strumenti di sviluppo Dataverse. Segui quindi le informazioni dettagliate sulla distribuzione dei pacchetti nell'articolo Distribuire pacchetti utilizzando Package Deployer o Windows PowerShell.

  • Per distribuire utilizzando l'interfaccia della riga di comando, usa il comando pac package deploy.

    > pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
    

    Nota

    Per distribuire un pacchetto in un ambiente di destinazione utilizzando l'interfaccia della riga di comando, devi prima impostare un profilo di autenticazione e selezionare un'organizzazione. Maggiori informazioni: pac auth create, pac org select

Procedure consigliate

Di seguito sono elencati alcuni suggerimenti di procedure consigliate da seguire quando si usano i pacchetti Package Deployer.

Creazione di pacchetti

Durante la creazione di pacchetti, gli sviluppatori devono:

  • Assicurarsi che gli assembly del pacchetto siano firmati.

Distribuzione dei pacchetti

Durante la distribuzione di pacchetti, gli amministratori di Dataverse devono:

  • Insistere sull'utilizzo di un assembly del pacchetto firmato affinché sia possibile ricollegare un assembly alla relativa origine.
  • Verificare il pacchetto in un'istanza di preproduzione, preferibilmente un'immagine mirror dell'istanza di produzione, prima di eseguirlo in un'istanza di produzione.
  • Eseguire il backup dell'istanza di produzione prima di distribuire il pacchetto.

Vedi anche

Strumento per la creazione di pacchetti di soluzioni