Crear paquetes para la herramienta Package Deployer

Package Deployer permite a los administradores implementar paquetes en instancias de Microsoft Dataverse. Un paquete de Package Deployer puede estar compuesto por cualquiera de estos elementos o por todos ellos:

  • Uno o varios archivos de solución de Dataverse.
  • Archivos sin formato o archivo de datos de configuración exportado desde la herramienta de migración de la configuración. Para obtener más información sobre la herramienta, consulte Mover datos de configuración entre instancias y organizaciones con la herramienta de migración de la configuración.
  • El código personalizado que puede ejecutarse antes, durante o después del paquete se implementa en la instancia de Dataverse.
  • Contenido HTML específico del paquete que mostrarse al principio y al final del proceso de implementación. Este contenido resultar útil para proporcionar una descripción de las soluciones y los archivos que se implementan en el paquete.

Nota

Hay otro tipo de paquete llamado paquete de complemento. Ese tipo de paquete es para ensamblajes dependientes de complementos y no tiene relación con paquetes de Package Deployer.

Requisitos previos

  • Asegúrese de que tiene todas las soluciones y otros archivos listos que desea incluir en el paquete.
  • Visual Studio 2019 o posterior, o Visual Studio Code.

Vista general del proceso

Para crear un paquete de Package Deployer, realice los pasos siguientes.

  • Crear un proyecto de Visual Studio o MSBuild
  • Agregar soluciones y otros archivos al proyecto
  • Actualice los archivos HTML proporcionados (opcional)
  • Especifique los valores de configuración para el paquete
  • Defina código personalizado para el paquete
  • Compilar e implementar el paquete

Estos pasos se describen en detalle en este artículo.

Crear un proyecto de paquete

El primer paso es crear un proyecto de Visual Studio o MSBuild para el paquete. Para hacer eso, debe tener una de las dos extensiones de herramientas disponibles instaladas en su computadora de desarrollo. Si usa Visual Studio Code, instale Microsoft Power Platform CLI. De lo contrario, si se usa Visual Studio 2019, instale Power Platform tools para Visual Studio. La extensión de Power Platform tools actualmente solo está disponible para Visual Studio 2019. Sin embargo, el proyecto creado se puede construir usando Visual Studio 2019 o posterior.

Seleccione la pestaña correspondiente a continuación para descubrir cómo crear un proyecto utilizando la extensión de herramienta deseada. Ambas herramientas generan el proyecto en un formato similar.

Ejecute el comando pac package init para crear el paquete inicial. Más información: pac package

pac package init help
pac package init --outputDirectory DeploymentPackage

La salida CLI resultante contiene las carpetas y los archivos que se muestran a continuación. El nombre de la carpeta "DeploymentPackage" se usó aquí como ejemplo.

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

En el proyecto creado, busque el archivo de configuración ImportConfig.xml en la carpeta PkgAssets y el archivo PackageImportExtension.cs. Modificará estos archivos como se describe más adelante en este artículo.

Agregar archivos a un paquete

Una vez que haya creado un proyecto de paquete, puede comenzar a agregar soluciones y otros archivos a ese proyecto.

Al usar la CLI, puede agregar paquetes externos, soluciones y referencias a su proyecto de paquete usando uno de los subcomandos agregar. Introduzca pac package help para ver la lista de subcomandos. Agreguemos una solución a nuestro paquete.

> 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.

Configurar el paquete

  1. Defina la configuración del paquete agregando información sobre el paquete en el archivo ImportConfig.xml en el proyecto. Abra el archivo para editarlo. La siguiente lista proporciona información acerca de cada parámetro y nodo en el archivo de configuración.

    installsampledata
    True o false. Si true instala datos de ejemplo en instancias de Dataverse. Estos datos son los mismos datos de ejemplo que puede instalar desde el área Configuración>Administración de datos en Dataverse.

    waitforsampledatatoinstall
    True o false. Si true y si installsampledata también se establece en true, espere los datos de ejemplo para instalar antes de implementar el paquete.

    Nota

    Asegúrese de establece installsampledata como verdadero si está configurando waitforsampledatatoinstall como verdadero.

    agentdesktopzipfile
    Nombre del archivo zip para desempaquetar. Si especifica un nombre de archivo .zip aquí, este agrega una pantalla durante el proceso de implementación del paquete que le solicita que seleccione una ubicación donde desea desempaquetar el contenido del archivo.

    Este atributo es de uso general para crear los paquetes para Unified Service Desk for Dynamics 365. Para obtener más información sobre Unified Service Desk, consulte la Guía de administración de Unified Service Desk 3.0..

    agentdesktopexename
    Nombre del archivo .exe o .msi del archivo zip o una dirección URL que se invocará al final del proceso de implementación.

    Este atributo es de uso general para crear los paquetes para Unified Service Desk.

    crmmigdataimportfile
    Nombre del archivo de datos de configuración predeterminada (.zip) exportado usando la herramienta de migración de la configuración.

    • También puede importar una versión localizada de los archivos de datos de configuración basada en el identificador de configuración regional (LCID) especificado mediante nuevos valores de tiempo de ejecución mientras ejecuta el implementador de paquetes. Use el nodo <cmtdatafile> (explicado posteriormente) para especificar las versiones localizadas del archivo de datos de configuración en un paquete y luego use el método OverrideConfigurationDataFileLanguage (explicado posteriormente) para especificar la lógica para importar el archivo de datos de configuración basado en el identificador de configuración regional especificado mediante los valores de tiempo de ejecución. No puede importar más de un archivo de datos de configuración con un paquete a la vez.

    • Para Dataverse (local), si el archivo de datos de configuración contiene información acerca del usuario, y las instancias de Dataverse de origen y destino se encuentran en el mismo dominio de Active Directory, la información del usuario se importará a la instancia de Dataverse de destino. Para importar la información de usuario a una instancia de Dataverse (local) en otro dominio, debe incluir el archivo de asignación de usuarios (.xml) generado mediante la herramienta de migración de la configuración en el proyecto, y especificarlo junto con el archivo de datos de configuración mediante el atributo usermapfilename en el nodo <cmtdatafile> explicado más adelante. La información de los usuarios no se puede importar a instancias de Dataverse.
      Nodo <solutions>
      Contiene una matriz de los nodos de <configsolutionfile> que describen las soluciones para importar. El orden de las soluciones en este nodo indica el orden en que las soluciones se importarán en la instancia de Dataverse de destino.

      Nodo <configsolutionfile>
      Use este nodo bajo el nodo <solutions> para especificar las soluciones individuales y la información siguiente para cada solución que desea importar:

    • solutionpackagefilename: Especifique el nombre del archivo .zip de la solución. Requerido.

    • overwriteunmanagedcustomizations: Especifique si desea sobrescribir personalizaciones no administradas cuando importa una solución que ya existe en la instancia de Dynamics 365 de destino. Este atributo es opcional, y si no especifica este atributo, de forma predeterminada las personalizaciones nos administradas de la solución existente se mantienen en la instancia de Dynamics 365 de destino.

    • publishworkflowsandactivateplugins: Especifique si publicar flujos de trabajo y activar complementos en la instancia de Dynamics 365 de destino después de importar la solución. Este atributo es opcional, y si no especifica este atributo, de forma predeterminada los flujos de trabajo se publican y los complementos se activan después de que la solución se importe en la instancia de Dynamics 365 de destino.

      Puede agregar varios nombres de archivo de solución en un paquete agregando tantos nodos de <configsolutionfile>. Por ejemplo, si desea importar tres archivos de solución, agréguelos como se muestra a continuación:

    
    <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 matriz de los nodos de <configimportfile> y de <zipimportdetails> que se usan para describir los archivos individuales y los archivos zip respectivamente que se importarán.

    Nodo <configimportfile>
    Use este nodo bajo el nodo de <configimportfile> para describir un archivo que se importará a Dataverse. Puede agregar varios archivos en un paquete agregando tantos nodos de <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>  
    
    

    A continuación se muestra una lista de atributos admitidos:

    Attribute Description
    filename Nombre del archivo que contiene los datos de importación. Si el archivo es un archivo .zip, debe estar presente un nodo <zipimportdetails> con un nodo <zipimportdetail> para cada archivo del archivo .zip.
    filetype Este valor puede ser csv, xml o zip.
    associatedmap Nombre de la asignación de datos de importación de Dataverse a usar con este archivo. Si se deja en blanco, trata de usar el nombre de la asignación de datos de importación determinado por el sistema para este archivo.
    importtoentity Puede ser el nombre del exe en el archivo zip, una dirección URL o un archivo .msi para proporcionar un vínculo para invocar al final del proceso.
    datadelimiter Nombre del delimitador de datos usado en el archivo de importación. Los valores válidos son comillas simples o comillas dobles.
    fielddelimiter Nombre del delimitador de campos usado en el archivo de importación. Los valores válidos son coma, dos puntos o comillas simples.
    enableduplicatedetection Indica si desea habilitar reglas de detección de duplicados en la importación de datos. Los valores válidos son true o false.
    isfirstrowheader Usado para denotar que la primera fila del archivo de importación contiene los nombres de campos. Los valores válidos son true o false.
    isrecordownerateam Indica si el propietario del registro de importación debe ser un equipo. Los valores válidos son true o false.
    owneruser Indica el Id. de usuario que debe ser el propietario de los registros. El valor predeterminado es el usuario que ha iniciado sesión actualmente.
    waitforimporttocomplete Si es true, el sistema espera que la importación termine antes de continuar. Si false, pone los trabajos en cola y continúa.

    Nodo <zipimportdetails>
    Este nodo contiene una matriz de los nodos de <zipimportdetail> que describen los archivos incluidos en un archivo zip que se usa para importar a Dynamics 365.

    Nodo <zipimportdetail>
    Use este nodo bajo el nodo de <zipimportdetails> para proporcionar información acerca de un archivo individual en un archivo .zip que se especifica en el nodo de <configimportfile>.

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

    A continuación se muestra una lista de atributos admitidos:

    Attribute Description
    filename Nombre del archivo que contiene los datos de importación.
    filetype Este valor puede ser csv o xml.
    importtoentity Puede ser el nombre del exe en el archivo zip, una dirección URL o un archivo .msi para proporcionar un vínculo para invocar al final del proceso.

    Nodo <filesmapstoimport>
    Este nodo contiene una matriz de los nodos de <configmapimportfile> para importar. El orden de los archivos de asignación de este nodo indica el orden en que se importan. Para obtener información acerca de los mapas de datos, consulte Crear asignaciones de datos para la importación.

    Nodo <configimportmapfile>
    Use este nodo bajo el nodo de <filesmapstoimport> para proporcionar información acerca de un archivo de asignación individual para importar en Dataverse.

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

    Nodo <cmtdatafiles>
    Este nodo contiene una matriz de nodos <cmtdatafile> que contiene la versión localizada del archivo de datos de configuración que se importará.

    Nodo <cmtdatafile>
    Use este nodo en el nodo <cmtdatafiles> para especificar los archivos de datos de configuración localizados junto con el identificador de configuración regional (obligatorio) y el archivo de asignación de la información del usuario (opcional). Por ejemplo:

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

    Puede definir la lógica personalizada en el método OverrideConfigurationDataFileLanguage (explicado posteriormente) para importar un archivo de datos de configuración localizado en lugar del predeterminado (especificado en crmmigdataimportfile) basado en el valor del identificador de configuración regional (LCID) especificado mediante los valores de tiempo de ejecución (explicados posteriormente).

  2. Seleccione Guardar todo.

    El xml siguiente representa el contenido de un archivo de ImportConfig.xml de ejemplo.

    <?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>  
    
    

Agregar código personalizado

Puede agregar código personalizado que se ejecute antes, durante y después de que el paquete se importe a un entorno. Para ello, siga estas instrucciones.

  1. Edite el archivo PackageTemplate.cs (o PackageImportExtension.cs) en la carpeta raíz del proyecto.

  2. En el archivo C# puede hacer lo siguiente:

    1. Escriba código personalizado para ejecutar cuando el paquete se inicie en la definición del método de sustitución de InitializeCustomExtension.

      Este método se puede usar para permitir a los usuarios usar los parámetros de tiempo de ejecución mientras ejecutan un paquete. Como programador, puede agregar compatibilidad para cualquier parámetro de tiempo de ejecución al paquete mediante la propiedad RuntimeSettings siempre que haga que el código lo procese basándose en la entrada del usuario.

      Por ejemplo, el siguiente código de ejemplo habilita un parámetro de tiempo de ejecución llamado SkipChecks para el paquete que tiene dos valores posibles: true o false. El código de ejemplo comprueba si el usuario ha especificado cualquier parámetro de tiempo de ejecución al ejecutar Package Deployer (usando la línea de comandos o PowerShell) y, a continuación procesa convenientemente la información. Si el usuario no especifica ningún parámetro en tiempo de ejecución al ejecutar el paquete, el valor de la propiedad RuntimeSettings será cero.

      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");  
      }  
      

      Este código permite al administrador usar la línea de comandos o el cmdlet Import-CrmPackage para especificar si se omiten las pruebas de seguridad al ejecutar la herramienta Package Deployer para importar el paquete. Más información: Implementar paquetes mediante Package Deployer y Windows PowerShell

    2. Introduzca código personalizado antes de importar las soluciones en la definición del método de reemplazo de PreSolutionImport para especificar si mantener o sobrescribir personalizaciones mientras actualiza la solución especificada en una instancia de Dataverse de destino y si se activan automáticamente complementos y flujos de trabajo.

    3. Utilice la definición del método de sustitución de RunSolutionUpgradeMigrationStep para realizar la transformación de datos o actualizar entre dos versiones de una solución. Este método se llama solo si la solución que va a importar ya está presente en la instancia de Dataverse de destino.

      Esta característica espera los siguientes parámetros:

      Parámetro Descripción
      solutionName Nombre de la solución
      oldVersion Número de versión de la solución antigua
      newVersion Número de versión de la solución nueva
      oldSolutionId GUID de la solución antigua.
      newSolutionId GUID de la solución nueva.
    4. Escriba código personalizado para ejecutar antes de que la importación de la solución se complete en la definición de reemplazo del método BeforeImportStage. Los datos de ejemplo y algunos archivos sin formato para soluciones especificadas en el archivo ImportConfig.xml se importan antes de que la importación de la solución se complete.

    5. Reemplace el idioma seleccionado actualmente para la importación de datos de configuración mediante la definición del método de reemplazo de OverrideConfigurationDataFileLanguage. Si el Id. de configuración regional (LCID) especificado del idioma especificado no se encuentra en la lista de idiomas disponibles en el paquete, se importa el archivo de datos predeterminado.

      Especifique los idiomas disponibles para los datos de configuración en el nodo <cmtdatafiles> del archivo ImportConfig.xml. El archivo de importación de datos de configuración predeterminado se especifica en el atributo crmmigdataimportfile en el archivo ImportConfig.xml.

      Omitir las verificaciones de datos (OverrideDataImportSafetyChecks = true) puede ser efectivo aquí si está seguro de que la instancia de Dataverse de destino no contiene ningún dato.

    6. Escriba código personalizado para ejecutar después de que la importación de la solución se complete en la definición de reemplazo del método AfterPrimaryImport>. Los archivos sin formato restantes que no se importaron anteriormente, antes de que la importación de la solución se iniciara, ahora se importan.

    7. Cambie el nombre predeterminado de la carpeta del paquete al nombre del paquete que desee. Para ello, cambie el nombre de la carpeta PkgFolder (o PkgAssets) en el panel Explorador de soluciones y luego edite el valor de devolución en la propiedad GetImportPackageDataFolderName.

      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. Cambie el nombre del paquete editando el valor de devolución en la propiedad de GetNameOfImport.

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

      Éste valor devuelto es el nombre del paquete que aparecerá en la página de selección del paquete en el asistente para el Package Deployer de Dynamics 365.

    9. Cambie la descripción del paquete editando el valor de devolución en la propiedad de GetImportPackageDescriptionText.

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

      Éste valor devuelto es la descripción del paquete que aparecerá junto al nombre del paquete en la página de selección del paquete del asistente de Package Deployer.

    10. Cambie el nombre largo del paquete editando el valor de devolución en la propiedad de GetLongNameOfImport.

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

      El nombre largo del paquete aparecerá en la página siguiente después de seleccionar el paquete para instalar.

  3. Además, la función y variables siguientes están disponibles para el paquete:

    Nombre Tipo Descripción
    CreateProgressItem(String) Función Usado para crear un nuevo artículo del progreso en la interfaz de usuario.
    RaiseUpdateEvent(String, ProgressPanelItemStatus) Función Usado para actualizar el progreso creado por la llamada a CreateProgressItem(String).

    ProgressPanelItemStatus es una enumeración con los siguientes valores:

    En curso = 0
    Finalizado = 1
    Error = 2
    Advertencia = 3
    Desconocido = 4
    RaiseFailEvent(String, Exception) Función Usado para generar error en la importación de estado actual con un mensaje de la excepción.
    IsRoleAssoicatedWithTeam(Guid, Guid) Función Usado para determinar si un rol está asociado con un equipo especificado.
    IsWorkflowActive(Guid) Función Usado para determinar si un flujo de trabajo especificado está activo.
    PackageLog Puntero de clases Es un puntero a la interfaz de registro inicializada para el paquete. Esta interfaz la usa un paquete para registrar mensajes y excepciones al archivo de registro del paquete.
    RootControlDispatcher Property Es una interfaz de distribuidor usada para permitirle que el control genere su propia interfaz de usuario durante la implementación del paquete. Use esta interfaz para encapsular los elementos o comando de la interfaz de usuario. Es importante comprobar si en esta variable hay valores nulos antes de usarla, ya que podría o no establecerse como un valor.
    CrmSvc Propiedad Esto es un puntero a la clase CrmServiceClient que permite que un paquete direccione Dynamics 365 desde el paquete. Use este puntero para ejecutar métodos de SDK y otras acciones en los métodos sustituidos.
    DataImportBypass Property Especificar si el Package Deployer de Dynamics 365 omite todas las operaciones de importación de datos, como importar datos de ejemplo de Dataverse, datos de archivos sin formato y datos exportados desde la herramienta de migración de la configuración. Especifique verdadero o falso. El valor predeterminado es false.
    OverrideDataImportSafetyChecks Propiedad Especifica si el Package Deployer de Dynamics 365 omitirá algunas de las pruebas de seguridad, lo que ayuda a mejorar el rendimiento de la importación. Especifique true o false. El valor predeterminado es false.

    Debe configurar esta propiedad como true solo si la instancia de Dataverse de destino no contiene ningún dato.
  4. Guarda el proyecto. El siguiente paso para compilar el paquete.

Compilar e implementar

Las siguientes secciones describen cómo construir e implementar un paquete.

Compilación

La construcción de su paquete se describe a continuación dependiendo de la herramienta que esté utilizando.

Para compilar un paquete creado con la CLI, puede cargar el archivo .csproj en Visual Studio, pero en su lugar usaremos el comando dotnet y MSBuild. El siguiente ejemplo asume que el directorio de trabajo contiene el archivo *.csproj.

> dotnet publish

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

Opcionalmente, puede ver los detalles del paquete construido.

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

El paquete está constituido por los siguientes archivos de la carpeta <Project>\Bin\Debug.

  • Carpeta <PackageName>: el nombre de la carpeta es el mismo que cambió para el nombre de carpeta del paquete en el paso 2.g de esta sección Agregar código personalizado. Esta carpeta incluye todas las soluciones, datos de configuración, archivos planos y el contenido del paquete.

Nota

Es posible que vea una carpeta .NET (p. ej., net472) que contiene una carpeta pdpublish. Su DLL y otros archivos de proyecto están en esa carpeta pdpublish.

  • <PackageName>.dll:: el conjunto incluye el código personalizado del paquete. De forma predeterminada, el nombre del ensamblado es el mismo que el nombre de su proyecto.

Implementar

Después de crear un paquete, puede implementarlo en la instancia de Dataverse mediante la herramienta Package Deployer, Windows PowerShell o un comando CLI.

Procedimientos recomendados

A continuación se enumeran algunos consejos de mejores prácticas a seguir cuando se trabaja con paquetes Package Deployer.

Creación de paquetes

Al crear paquetes, los desarrolladores deben:

  • Asegurar de que los conjuntos de paquetes estén firmados.

Implementación de paquetes

Cuando implementa paquetes, los administradores de Dataverse deben:

  • Insistir en un ensamblado de paquete firmado de modo que se pueda realizar el seguimiento de un ensamblado hasta su origen.
  • Comprobar el paquete en una instancia de preproducción (preferiblemente una imagen reflejada de la instancia de producción) antes de ejecutarlo en una instancia de producción.
  • Realizar una copia de seguridad de la instancia de producción antes de implementar el paquete.

Vea también

Herramienta Empaquetador de soluciones