Criar pacote para a ferramenta Package Deployer

O Package Deployer permite que os administradores implantem pacotes nas instâncias do Microsoft Dataverse. Um pacote do Package Deployer pode consistir em todos ou qualquer um dos itens a seguir:

  • Um ou mais arquivos de solução do Dataverse.
  • Arquivos de dados simples ou de configuração exportados da ferramenta Migração de Configuração. Para obter mais informações sobre a ferramenta, consulte Mover dados de configuração em instâncias e organizações com a ferramenta Migração de Configuração.
  • Um código personalizado que pode ser executado antes, durante ou depois do pacote ser implantado na instância do Dataverse.
  • Um conteúdo HTML específico para o pacote que pode ser exibido no início e no final do processo de implantação. Esse conteúdo pode ser útil para fornecer uma descrição das soluções e dos arquivos que são implantados no pacote.

Nota

Existe outro tipo de pacote chamado pacote de plug-in. Esse tipo de pacote destina-se a assemblies dependentes de plug-in e não tem relação com pacotes do Package Deployer.

Pré-requisitos

  • Verifique se você tem toda a solução e outros arquivos prontos que deseja incluir no pacote.
  • Visual Studio 2019 ou posterior, ou Visual Studio Code.

Visão geral do processo

Para criar um pacote do Package Deployer, execute etapas a seguir.

  • Criar um projeto do Visual Studio ou MSBuild
  • Adicionar soluções e outros arquivos ao projeto
  • Atualizar arquivos HTML fornecidos (opcional)
  • Especificar os valores de configuração do pacote
  • Definir código personalizado para o pacote
  • Criar e implantar o pacote

Essas etapas estão descritas aqui neste artigo.

Criar um projeto de pacote

A primeira etapa é criar um projeto do Visual Studio ou MSBuild para o pacote. Para fazer isso, você deve ter uma das duas extensões de ferramenta disponíveis instaladas em seu computador de desenvolvimento. Se estiver usando o Visual Studio Code, instale o Microsoft Power Platform CLI. Caso contrário, se estiver usando o Visual Studio 2019, instale as Power Platform Tools para o Visual Studio. A extensão do Power Platform tools está disponível atualmente apenas para o Visual Studio 2019. No entanto, o projeto criado pode ser construído usando o Visual Studio 2019 ou posterior.

Selecione a guia apropriada abaixo para descobrir como criar um projeto usando a extensão de ferramenta desejada. Ambas as ferramentas produzem o projeto em um formato semelhante.

Execute o comando pac package init para criar o pacote inicial. Mais informações: pac package

pac package init help
pac package init --outputDirectory DeploymentPackage

A saída da CLI resultante contém as pastas e arquivos mostrados abaixo. O nome da pasta "DeploymentPackage" foi usado aqui como exemplo.

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

No projeto criado, encontre o arquivo de configuração ImportConfig.xml na pasta PkgAssets e o arquivo PackageImportExtension.cs. Você modificará esses arquivos conforme descrito posteriormente neste artigo.

Adicionar arquivos de pacote

Depois de criar um projeto de pacote, é possível começar a adicionar soluções e outros arquivos a esse projeto.

Ao usar a CLI, você pode adicionar pacotes, soluções e referências externas ao seu projeto de pacote usando um dos subcomandos adicionar. Digite pac package help para ver a lista de subcomandos. Vamos adicionar uma solução ao nosso pacote.

> 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 o pacote

  1. Defina a configuração do pacote adicionando informações sobre o pacote no arquivo ImportConfig.xml disponível no projeto. Abra o arquivo para edição. A lista a seguir fornece informações sobre cada parâmetro e nó do arquivo de configuração.

    installsampledata
    True ou false. Se true, instala dados de exemplo na instância do Dataverse. Esses dados são os mesmos dados de exemplo que você pode instalar na área Configurações>Gerenciamento de Dados na Dataverse.

    waitforsampledatatoinstall
    True ou false. Se true e se installsampledata também for configurado para true, aguarda a instalação dos dados de exemplo antes da implantação do pacote.

    Nota

    Defina installsampledata como true se estiver definindo waitforsampledatatoinstall como true.

    agentdesktopzipfile
    Nome do arquivo .zip que será desempacotado. Se você especificar um nome de arquivo .zip aqui, ele adiciona uma tela durante o processo de implantação do pacote que solicita a seleção de um local onde você deseja desempacotar o conteúdo do arquivo.

    Esse atributo é comumente usado para criar pacotes para o Unified Service Desk para Dynamics 365. Para obter informações sobre Unified Service Desk, consulte Guia de Administração do Unified Service Desk 3.0.

    agentdesktopexename
    Nome do .exe ou .msi do arquivo .zip ou uma URL que será invocada no final do processo de implantação.

    Esse atributo é comumente usado para criar pacotes para o Unified Service Desk.

    crmmigdataimportfile
    Nome do arquivo do arquivo de dados de configuração padrão (.zip) exportado usando a ferramenta Migração de Configuração.

    • Você também pode importar uma versão localizada de dados de configuração com base na ID de localidade (LCID) usando novas definições especificadas em tempo de execução durante a execução do package deployer. Use o nó de <cmtdatafile> (explicado posteriormente) para especificar as versões localizadas de dados de configuração em um pacote e depois usar o método OverrideConfigurationDataFileLanguage (explicado posteriormente) para especificar a lógica para importar o arquivo de dados de configuração com base na ID de localidade especificada usando as configurações em tempo de execução. Não é possível importar mais de um arquivo de dados de configuração usando um pacote de cada vez.

    • No Dataverse(local), se seu arquivo de dados de configuração contiver informações de usuários e as instâncias de origem e de destino do Dataverse estiverem no mesmo Domínio do Active Directory, as informações dos usuários serão importadas para a instância de destino do Dataverse. Para importar informações de usuários em uma instância do Dataverse (local) em outro domínio, você deve incluir o arquivo de mapa de usuário (.xml) gerado com a ferramenta Migração de Configuração em seu projeto e especificá-lo junto com o arquivo de dados de configuração com o atributo do usermapfilename no nó do <cmtdatafile> explicado posteriormente. As informações de usuário não podem ser importadas em instâncias do Dataverse.
      <solutions>
      Contém uma matriz de nós do <configsolutionfile> que descreve as soluções que serão importadas. A ordem das soluções nesse nó indica a ordem em que as soluções serão importadas na instância de destino do Dataverse.

      <configsolutionfile>
      Use esse nó no nó <solutions> para especificar as soluções individuais e as seguintes informações de cada solução a ser importada:

    • solutionpackagefilename: especifique o nome de arquivo .zip da sua solução. Necessário.

    • overwriteunmanagedcustomizations: especifique se as personalizações não gerenciadas devem ser substituídas ao importar uma solução já existente na instância de destino do Dynamics 365. Este atributo é opcional, e se você não especificar esse atributo, as personalizações não gerenciadas na solução existente serão mantidas na instância de destino do Dynamics 365 por padrão.

    • publishworkflowsandactivateplugins: especifique se os fluxos de trabalho devem ser publicados e se os plug-ins devem ser ativados na instância de destino do Dynamics 365 depois que a solução for importada. Isso é opcional, e se você não especificar esse atributo, os fluxos de trabalho serão publicados e os plug-ins serão ativados por padrão depois que a solução for importada na instância de destino do Dynamics 365.

      É possível adicionar vários nomes de arquivo da solução em um pacote, adicionando vários nós do <configsolutionfile>. Por exemplo, se desejar importar três arquivos da solução, adicione-os como mostrado abaixo:

    
    <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>
    Contém uma matriz de nós do <configimportfile> e <zipimportdetails> usados para descrever os arquivos individuais e os arquivos .zip, respectivamente, que serão importados.

    <configimportfile>
    Use este nó no nó do <configimportfile> para descrever um arquivo que será importado para o Dataverse. É possível adicionar vários arquivos em um pacote, adicionando vários nós do <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>  
    
    

    Veja abaixo uma lista de atributos compatíveis:

    Atributo Descrição
    filename Nome do arquivo que contém os dados de importação. Se o arquivo for um arquivo .zip, o nó de <zipimportdetails> deve estar presente com um nó de <zipimportdetail> para cada arquivo do arquivo .zip.
    filetype Esse valor pode ser csv, xml ou zip.
    associatedmap Nome do mapa de dados de importação do Dataverse que será usado com este arquivo. Se estiver em branco, fará uma tentativa de usar o nome do mapa de dados de importação determinado pelo sistema para este arquivo.
    importtoentity Pode ser o nome do .exe no arquivo .zip, uma URL ou um arquivo .msi que fornece um link para invocar o final do processo.
    datadelimiter Nome do delimitador de dados usado no arquivo de importação. Os valores válidos são aspas simples ou duplas.
    fielddelimiter Nome do delimitador de campos usado no arquivo de importação. Os valores válidos são vírgula ou dois pontos, ou aspas simples.
    enableduplicatedetection Indica se as regras de detecção de duplicidades devem ser habilitadas durante a importação de dados. Os valores válidos são true ou false.
    isfirstrowheader Usado para indicar se a primeira linha do arquivo de importação contém os nomes dos campos. Os valores válidos são true ou false.
    isrecordownerateam Indica se o proprietário do registro da importação precisa ser uma equipe. Os valores válidos são true ou false.
    owneruser Indica o ID de usuário que deve ser o proprietário dos registros. O valor padrão é o usuário atualmente conectado.
    waitforimporttocomplete Se true, o sistema aguarda a conclusão da importação antes de continuar. Se false, ele coloca os trabalhos na fila e continua.

    <zipimportdetails>
    Este nó contém uma matriz de nós de <zipimportdetail> que descreve os arquivos incluídos em um arquivo .zip que será usado para a importação para o Dynamics 365.

    <zipimportdetail>
    Use este nó no nó de <zipimportdetails> para fornecer informações sobre um arquivo individual em um arquivo .zip que é especificado no nó de <configimportfile>.

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

    Os atributos compatíveis estão listados abaixo:

    Atributo Description
    filename Nome do arquivo que contém os dados de importação.
    filetype Esse valor pode ser csv ou xml.
    importtoentity Pode ser o nome do .exe no arquivo .zip, uma URL ou um arquivo .msi que fornece um link para invocar o final do processo.

    <filesmapstoimport>
    Este nó contém uma matriz de nós de <configmapimportfile> que serão importados. A ordem dos arquivos do mapa neste nó indica a ordem na qual são importados. Para obter informações sobre mapas de dados, consulte Criar mapas de dados para importação.

    <configimportmapfile>
    Use este nó no nó de <filesmapstoimport> para fornecer informações sobre um arquivo de mapa individual que será importado no Dataverse.

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

    <cmtdatafiles>
    Esse nó contém uma matriz de nós de <cmtdatafile> que contém versão localizada dos arquivos de dados de configuração a serem importados.

    <cmtdatafile>
    Use esse nó no nó de <cmtdatafiles> para especificar os arquivos de dados de configuração encontrados no arquivo de mapa das informações de identificação de localidade (necessário) e usuário (opcional). Por exemplo:

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

    Você pode definir sua lógica personalizada no método OverrideConfigurationDataFileLanguage (explicado posteriormente) para importar um arquivo de dados de configuração localizado do padrão (especificado em crmmigdataimportfile) baseado no valor de LCID (ID de localidade) especificado usando as configurações do tempo de execução (explicado posteriormente).

  2. Selecione Salvar Tudo.

    O seguinte xml representa o conteúdo de um arquivo ImportConfig.xml de exemplo.

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

Adicionar código personalizado

É possível adicionar código personalizado que é executado antes, durante e depois que o pacote é importado para um ambiente. Para isso, siga estas instruções:

  1. Edite o arquivo PackageTemplate.cs (ou PackageImportExtension.cs) na pasta raiz do projeto.

  2. No arquivo C#, é possível:

    1. Digite o código personalizado que será executado quando o pacote é inicializado na definição do método de substituição de InitializeCustomExtension.

      Esse método pode ser usado para permitir que os usuários usem os parâmetros em tempo de execução ao executar um pacote. Como desenvolvedor, você pode adicionar suporte a todos os parâmetros em tempo de execução a seu pacote usando a propriedade RuntimeSettings, desde que você tenha código para processá-los com base na entrada do usuário.

      Por exemplo, o código de exemplo a seguir permite um parâmetro em tempo de execução chamado SkipChecks para o pacote que contém dois valores possíveis: verdadeiro ou falso. O código de exemplo verifica se o usuário especificou os parâmetros em tempo de execução ao executar Package Deployer (usando a linha de comandos ou o PowerShell) e, em seguida, processa as informações de forma adequada. Se nenhum parâmetro de tempo de execução for especificado pelo usuário durante a execução do pacote, o valor da propriedade RuntimeSettings será nulo.

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

      Esse código permite que o administrador use a linha de comandos ou o cmdlet Import-CrmPackage para especificar se ignora as verificações de segurança ao executar a ferramenta Package Deployer para importar o pacote. Mais informações: Implantar pacotes usando o Package Deployer e o Windows PowerShell

    2. Digite o código personalizado a ser executado antes de as soluções serem importadas na definição do método de substituição PreSolutionImport para especificar se as personalizações devem ser mantidas ou substituídas ao atualizar a solução especificada em uma instância de destino do Dataverse e se os plug-ins e os fluxos de trabalho devem ser ativados automaticamente.

    3. Use a definição do método de substituição de RunSolutionUpgradeMigrationStep para executar transformação ou atualização de dados entre duas versões de uma solução. Esse método é chamado apenas se a solução que você está importando já estiver presente na instância de destino do Dataverse.

      Esta função espera os seguintes parâmetros:

      Parâmetro Descrição
      solutionName Nome do fornecedor da solução
      oldVersion Número de versão da solução antiga
      newVersion Número de versão da nova solução
      oldSolutionId GUID da solução antiga.
      newSolutionId GUID da nova solução.
    4. Digite o código personalizado a ser executado antes da conclusão da importação da solução na definição da substituição do método BeforeImportStage. Os dados de exemplo e alguns arquivos simples para soluções especificadas no arquivo ImportConfig.xml são importados antes da importação da solução ser concluída.

    5. Substitua o idioma atual selecionado para a importação dos dados de configuração usando a definição do método de substituição OverrideConfigurationDataFileLanguage. Se a LCID (identificação de localidade) do idioma especificado não for encontrada na lista de idiomas disponíveis no pacote, o arquivo de dados padrão será importado.

      Especifique os idiomas disponíveis para os dados de configuração no nó <cmtdatafiles> no arquivo ImportConfig.xml. O arquivo de importação de dados de configuração padrão é especificado no atributo crmmigdataimportfile no arquivo ImportConfig.xml.

      Ignorar as verificações de dados (OverrideDataImportSafetyChecks = true) pode ser eficaz aqui se você tiver certeza de que a instância de destino do Dataverse não contém nenhum dado.

    6. Digite o código personalizado a ser executado depois da conclusão da importação na definição da substituição do método AfterPrimaryImport>. Os arquivos simples restantes que não foram importados anteriormente, antes do início da importação da solução, agora são importados.

    7. Altere o nome padrão da pasta do pacote para o nome de pacote desejado. Para fazer isso, renomeie a pasta PkgFolder (ou PkgAssets) no painel do Gerenciador de Soluções e edite o valor de retorno na propriedade 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. Altere o nome do pacote editando o valor de retorno na propriedade GetNameOfImport.

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

      Este valor retornado é o nome do pacote que será exibido na página de seleção do pacote no assistente do Package Deployer do Dynamics 365.

    9. Altere a descrição do pacote editando o valor de retorno na propriedade GetImportPackageDescriptionText.

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

      Este valor retornado é a descrição do pacote que aparece com o nome do pacote na página de seleção do pacote no assistente do Package Deployer.

    10. Altere o nome longo do pacote editando o valor de retorno na propriedade GetLongNameOfImport.

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

      O nome longo do pacote é exibido na página seguinte, após a seleção do pacote que será instalado.

  3. Além disso, as seguintes funções e variáveis estão disponíveis para o pacote:

    Nome Tipo Descrição
    CreateProgressItem(String) Função Usada para criar um novo item de progresso na interface do usuário (IU).
    RaiseUpdateEvent(String, ProgressPanelItemStatus) Função Usada para atualizar o progresso criado pela chamada para CreateProgressItem(String).

    ProgressPanelItemStatus é uma enumeração com os seguintes valores:

    Trabalho = 0
    Conclusão = 1
    Falha = 2
    Aviso = 3
    Desconhecido = 4
    RaiseFailEvent(String, Exception) Function Usada para causar uma falha na importação do status atual com uma mensagem de exceção.
    IsRoleAssoicatedWithTeam(Guid, Guid) Função Usada para determinar se uma função é associada a uma equipe especificada.
    IsWorkflowActive(Guid) Função Usada para determinar se um fluxo de trabalho especificado está ativo.
    PackageLog Ponteiro de classes Um ponteiro na interface de log inicializada do pacote. Esta interface é utilizada por um pacote para registrar em log as mensagens e exceções no arquivo de log do pacote.
    RootControlDispatcher Propriedade Uma interface de distribuidor utilizada para permitir que o controle renderize sua própria interface do usuário durante a implantação do pacote. Utilize esta interface para empacotar os elementos ou comandos da interface do usuário. É importante verificar esta variável para valores nulos antes de usá-lo como pode ou não pode ser definido para um valor.
    CrmSvc Propriedade Um ponteiro para a classe CrmServiceClient que permite que um pacote enderece o Dynamics 365 a partir do pacote. Use esse ponteiro para executar os métodos SDK e outras ações nos métodos substituídos.
    DataImportBypass Propriedade Especifique se o Package Deployer do Dynamics 365 ignora todas as operações de importação de dados, como a importação de dados de exemplo do Dataverse, dados de arquivos simples e dados exportados da ferramenta Migração de Configuração. Especifique true ou false. O padrão é false.
    OverrideDataImportSafetyChecks Propriedade Especifique se o Package Deployer do Dynamics 365 ignora algumas de suas verificações de segurança, o que ajuda a melhorar o desempenho da importação. Especifique true ou false. O padrão é false.

    Defina esta propriedade como true apenas se a instância de destino do Dataverse não contiver nenhum dado.
  4. Salve seus projetos. A próxima etapa é criar o pacote.

Criar e implantar

As seções a seguir descrevem como construir e implantar um pacote.

Compilar

A construção do seu pacote é descrita abaixo dependendo da ferramenta que você está usando.

Para criar um pacote criado com a CLI, você pode carregar o arquivo .csproj no Visual Studio, mas em vez disso usaremos o comando dotnet e o MSBuild. O exemplo abaixo assume que o diretório de trabalho contém o arquivo *.csproj.

> dotnet publish

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

Você também pode ver os detalhes do pacote criado.

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

Seu pacote é composto dos seguintes arquivos na pasta <Project>\Bin\Debug folder.

  • Pasta <PackageName>: o nome da pasta é igual ao nome que você alterou para a pasta do pacote na etapa 2.g desta seção Adicionar código personalizado. Essa pasta contém todas as soluções, os dados de configuração, os arquivos simples e o conteúdo de seu pacote.

Nota

Talvez você veja uma pasta .NET (por exemplo, net472) contendo uma pasta pdpublish. Sua DLL e outros arquivos de projeto estão nessa pasta pdpublish.

  • <PackageName>.dll: o assembly contém o código personalizado de seu pacote. Por padrão, o nome do assembly será igual ao nome do seu projeto.

Implantar

Depois de criar um pacote, é possível implantá-lo na instância do Dataverse usando a ferramenta Package Deployer, o Windows PowerShell ou um comando da CLI.

Práticas recomendadas

Abaixo estão listadas algumas dicas de práticas recomendadas a serem seguidas ao trabalhar com pacotes do Package Deployer.

Criação de pacotes

Ao criar pacotes, os desenvolvedores devem:

  • Certifique-se de que os conjuntos de pacotes sejam assinados.

Implantação de pacotes

Ao implantar pacotes, os administradores do Dataverse devem:

  • Insista em assemblies de pacote assinado para que você possa rastrear um assembly de volta para sua origem.
  • este o pacote em uma instância pré-produção, preferivelmente uma imagem espelhada da instância de produção, antes de executar em uma instância de produção.
  • Faça o backup da instância de produção antes de implantar o pacote.

Consulte também

Ferramenta Pacote de Soluções