Criar pacotes para a ferramenta Package Deployer

O Package Deployer permite aos administradores implementar pacotes em instâncias do Microsoft Dataverse. Um pacote do Package Deployer pode ser composto por qualquer um ou todos os seguintes:

  • Um ou mais ficheiros de solução do Dataverse.
  • Ficheiros simples ou ficheiros de dados de configuração exportados pela Ferramenta de Migração da Configuração. Para mais informações sobre a ferramenta, consulte Mover dados de configuração entre instâncias e organizações com a Ferramenta de Migração da Configuração.
  • Código personalizado que pode ser executado antes, durante ou após o pacote ser implementado na instância do Dataverse.
  • O conteúdo HTML específico do pacote que pode ser apresentado no início e no fim do processo de implementação. Este conteúdo pode ser útil fornecer uma descrição de soluções e dos ficheiros que são implementados no pacote.

Nota

Existe outro tipo de pacote denominado pacote de plug-ins. Esse tipo de pacote é para assemblagens dependentes de plug-in e não tem qualquer relação com pacotes do Package Deployer.

Pré-requisitos

  • Certifique-se de que tem todos os ficheiros de solução e outros prontos que pretende incluir no pacote.
  • Visual Studio 2019 ou posterior, ou o Visual Studio Code.

Descrição geral do processo

Para criar um pacote do Package Deployer, efetue os passos que se seguem.

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

Estes passos são descritos detalhadamente neste artigo.

Criar um projeto de pacote

O primeiro passo é criar um projeto do Visual Studio ou do MSBuild para o pacote. Para tal, tem de ter uma de duas extensões de ferramenta disponíveis instaladas no seu computador de desenvolvimento. Se estiver a utilizar o Visual Studio Code, instale a Microsoft Power Platform CLI. Caso contrário, se utilizar o Visual Studio 2019, instale o Power Platform Tools para Visual Studio. A extensão de ferramentas do Power Platform está atualmente disponível apenas para o Visual Studio 2019. No entanto, o projeto criado pode ser criado utilizando o Visual Studio 2019 ou posterior.

Selecione o separador apropriado abaixo para saber como criar um projeto utilizando a extensão de ferramenta pretendida. Ambas as ferramentas resultam num projeto de 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 os ficheiros mostrados abaixo. O nome da pasta "DeploymentPackage" foi utilizado aqui como exemplo.

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

No projeto criado, encontre o ficheiro de configuração ImportConfig.xml na pasta PkgAssets e o ficheiro PackageImportExtension.cs. Modificará estes ficheiros conforme descrito posteriormente neste artigo.

Adicionar ficheiros de pacote

Depois de criar um projeto de pacote, pode começar a adicionar soluções e outros ficheiros a esse projeto.

Ao utilizar a CLI, pode adicionar pacotes externos, soluções e referências ao seu projeto de pacote utilizando um dos subcomandos adicionar. Introduza 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 ao adicionar informações sobre o seu pacote no ficheiro ImportConfig.xml no projeto. Abra o ficheiro para edição. A lista seguinte fornece informações sobre cada parâmetro e nó no ficheiro de configuração.

    installsampledata
    True ou false. Se true, instala dados de exemplo na instância do Dataverse. Estes dados são os mesmos dados de exemplo que pode instalar a partir da área Definições>Gestão de Dados no Dataverse.

    waitforsampledatatoinstall
    True ou false. Se true, e se installsampledata também estiver definido como true, aguarde a instalação dos dados de exemplo antes de implementar o pacote.

    Nota

    Certifique-se de que define installsampledata como true se estiver a definir waitforsampledatatoinstall como true.

    agentdesktopzipfile
    O nome de ficheiro do ficheiro zip a descompactar. Se especificar um nome de ficheiro .zip aqui, adiciona um ecrã durante o processo de implementação do pacote que lhe pede para selecionar uma localização onde pretende desempacotar o conteúdo do ficheiro.

    Este atributo é utilizado frequentemente para criar pacotes para o Unified Service Desk para Dynamics 365. Para mais informações sobre o Unified Service Desk, consulte o Guia de Administração do Unified Service Desk 3.0.

    agentdesktopexename
    Nome do ficheiro .exe ou .msi no ficheiro zip ou um URL para ser invocado no final do processo de implementação.

    Este atributo é utilizado frequentemente para criar pacotes para o Unified Service Desk.

    crmmigdataimportfile
    Nome de ficheiro do ficheiro de dados de configuração predefinido (.zip) exportado através da Ferramenta de Migração da Configuração.

    • Também pode importar uma versão localizada do ficheiro de dados de configuração baseado no ID de região (LCID) especificado com as novas definições de runtime durante a execução do Package Deployer. Utilize o nó <cmtdatafile> (explicado mais à frente) para especificar as versões localizadas do ficheiro de dados de configuração num pacote e, em seguida, utilize o método OverrideConfigurationDataFileLanguage (explicar mais à frente) para especificar a lógica para importar o ficheiro de dados de configuração, baseado no ID de região especificado através das definições de runtime. Não pode importar mais de um ficheiro de dados de configuração através de um pacote de cada vez.

    • Para o Dataverse (no local), se o seu ficheiro de dados de configuração contiver informações do utilizador, e as instâncias de origem e de destino do Dataverse estiverem no mesmo Domínio do Active Directory, as informações de utilizador são importadas para a instância do Dataverse de destino. Para importar informações de utilizador para uma instância do Dataverse (no local) num domínio diferente, tem de incluir o ficheiro de mapa do utilizador (.xml) gerado através da Ferramenta de Migração da Configuração no seu projeto, e especificá-lo juntamente com o ficheiro de dados de configuração através do atributo usermapfilename no nó <cmtdatafile> explicado posteriormente. As informações de utilizador não podem ser importadas para as instâncias do Dataverse.
      <solutions>
      Contém uma matriz dos nós <configsolutionfile> que descrevem as soluções a importar. A ordem das soluções ao abrigo deste nó indica a ordem pela qual as soluções serão importadas na instância do Dataverse de destino.

      <configsolutionfile>
      Utilize este nó no nó <solutions> para especificar as soluções individuais e as seguintes informações para cada solução a importar:

    • solutionpackagefilename: especifique o nome do ficheiro .zip da sua solução. Obrigatório.

    • overwriteunmanagedcustomizations: especifique se deve substituir quaisquer personalizações não geridas ao importar uma solução que já existe na instância do Dynamics 365 de destino. Isto atributo é opcional e, se não especificar este atributo, por predefinição as personalizações não geridas na solução existente são mantidas na instância do Dynamics 365 de destino.

    • publishworkflowsandactivateplugins: especificar se deve publicar os fluxos de trabalho e ativar os plug-ins na instância do Dynamics 365 de destino após a importação da solução. Este atributo é opcional, e se não especificar este atributo, por predefinição os fluxos de trabalho são publicados e os plug-ins são ativados após a importação da solução na instância do Dynamics 365 de destino.

      Pode adicionar vários nomes de ficheiro da solução num pacote ao adicionar o mesmo número de nós <configsolutionfile>. Por exemplo, se pretende que sejam importados três ficheiros de 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 dos nós <configimportfile> e <zipimportdetails> que são utilizados para descrever ficheiros individuais e ficheiros zip, respetivamente, para importação.

    <configimportfile>
    Utilize este nó sob o nó <configimportfile> para descrever um ficheiro a importar para Dataverse. Pode adicionar vários ficheiros num pacote ao adicionar o mesmo número de nós <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>  
    
    

    Abaixo, segue-se uma lista de atributos suportados:

    Atributo Descrição
    filename Nome do ficheiro que contém os dados de importação. Se o ficheiro for um ficheiro .zip, tem de estar presente um nó <zipimportdetails> com um nó <zipimportdetail> para cada ficheiro no ficheiro .zip.
    filetype Este valor pode ser csv, xml ou zip.
    associatedmap Nome do mapa de dados de importação do Dataverse a utilizar com este ficheiro. Se estiver em branco, as tentativas para utilizar o sistema determinaram o nome do mapa de dados de importação para este ficheiro.
    importtoentity Pode ser o nome do exe no ficheiro zip, um URL ou um ficheiro .msi para fornecer uma ligação para invocar no final do processo.
    datadelimiter Nome do delimitador de dados utilizado no ficheiro de importação. Os valores válidos são plica ou aspas.
    fielddelimiter Nome do delimitador de campos utilizado no ficheiro de importação. Os valores válidos são vírgula ou dois pontos, ou plica.
    enableduplicatedetection Indica se são ativadas as regras de deteções de duplicados na importação de dados. Os valores válidos são true ou false.
    isfirstrowheader Utilizado para denotar que a primeira linha do ficheiro de importação contém os nomes de campos. Os valores válidos são true ou false.
    isrecordownerateam Indica se o proprietário do registo na importação deve ser uma equipa. Os valores válidos são true ou false.
    owneruser Indica o ID de utilizador que deve ser proprietário dos registos. O valor predefinido é o utilizador com sessão atualmente iniciada.
    waitforimporttocomplete Se true, o sistema aguarda a conclusão da importação antes de prosseguir. Se false, coloca as tarefas em fila e prossegue.

    <zipimportdetails>
    Este nó contém uma matriz de nós <zipimportdetail> que descrevem os ficheiros incluídos num ficheiro zip que é utilizado para importar para o Dynamics 365.

    <zipimportdetail>
    Utilize este nó sob o nó <zipimportdetails> para fornecer informações sobre um ficheiro individual num ficheiro .zip especificado no nó <configimportfile>.

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

    Os atributos suportados são listados abaixo:

    Atributo Descrição
    filename Nome do ficheiro que contém os dados de importação.
    filetype Este valor pode ser csv ou xml.
    importtoentity Pode ser o nome do exe no ficheiro zip, um url ou um ficheiro .msi para fornecer uma ligação para invocar no final do processo.

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

    <configimportmapfile>
    Utilize este nó sob o nó <filesmapstoimport> para fornecer informações sobre um ficheiro de mapa individual para importar no Dataverse.

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

    <cmtdatafiles>
    Este nó contém uma matriz de nós <cmtdatafile> que contém a versão localizada do ficheiro de dados de configuração a importar.

    <cmtdatafile>
    Utilize este nó sob o nó <cmtdatafiles> para especificar os ficheiros de dados de configuração localizados, juntamente com o ID de região (obrigatório) e o ficheiro do mapa de informações do utilizador (opcional). Por exemplo:

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

    Pode definir a sua lógica personalizada no método OverrideConfigurationDataFileLanguage (explicado posteriormente) para importar um ficheiro de dados de configuração localizado, em vez do predefinido (especificado em crmmigdataimportfile) baseado no valor de ID de região (LCID) especificado através das definições runtime (explicado mais tarde).

  2. Selecione Guardar Como.

    O xml seguinte representa o conteúdo de um ficheiro ImportConfig.xml de amostra.

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

Pode adicionar código personalizado que seja executado antes, durante e depois de o pacote ser importado para um ambiente. Para tal, siga estas instruções.

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

  2. No ficheiro C#, pode:

    1. Introduzir o código personalizado a executar quando o pacote é inicializado na definição do método de substituição de InitializeCustomExtension.

      Este método pode ser utilizado para permitir que os utilizadores utilizem os parâmetros de runtime durante a execução de um pacote. Como programador, pode adicionar suporte para qualquer parâmetro de runtime ao seu pacote, através da propriedade RuntimeSettings, desde que tenha código para o processar com base na entrada do utilizador.

      Por exemplo, o código de exemplo seguinte ativa um parâmetro de runtime chamado SkipChecks para o pacote que tem dois valores possíveis: true ou false. O código de exemplo verifica se o utilizador especificou quaisquer parâmetros de runtime durante a execução do Package Deployer (quer utilizando a linha de comando, quer o PowerShell), e, em seguida, processa as informações em conformidade. Se não forem especificados parâmetros de runtime pelo utilizador 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");  
      }  
      

      Este código permite que o administrador utilize a linha de comando ou o cmdlet Import-CrmPackage para especificar se as verificações de segurança devem ser ignoradas durante a execução da ferramenta Package Deployer para importar o pacote. Mais informações: Implementar pacotes utilizando o Package Deployer e o Windows PowerShell

    2. Introduzir código personalizado a executar antes de as soluções serem importadas na definição do método de substituição de PreSolutionImport para especificar se as personalizações são mantidas ou substituídas durante a atualização da solução especificada numa instância do Dataverse de destino, e se os plug-ins e os fluxos de trabalho são ativados automaticamente.

    3. Utilizar a definição do método de substituição de RunSolutionUpgradeMigrationStep para efetuar a transformação dos dados ou atualizar entre duas versões de uma solução. Este método é chamado apenas se a solução que está a importar já estiver presente na instância do Dataverse.

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

      Parâmetro Descrição
      solutionName Nome da solução
      oldVersion Número da versão da solução antiga
      newVersion Número da versão da nova solução
      oldSolutionId GUID da solução antiga.
      newSolutionId GUID da nova solução.
    4. Introduzir o código personalizado a executar antes da conclusão da importação da solução na definição de substituição do método BeforeImportStage. Os dados de exemplo e alguns ficheiros simples para soluções especificados no ficheiro ImportConfig.xml são importados antes da conclusão da importação da solução.

    5. Substituir o idioma selecionado atualmente para a importação de dados de configuração através da definição do método de substituição de OverrideConfigurationDataFileLanguage. Se o ID de região (LCID) especificado do idioma especificado não for encontrado na lista de idiomas disponíveis no pacote, é importado o ficheiro de dados predefinido.

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

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

    6. Introduzir o código personalizado a executar depois da conclusão da importação na definição de substituição do método AfterPrimaryImport>. Os restantes ficheiros simples que não foram importados anteriormente, antes de iniciada a importação da solução, são importados agora.

    7. Altere o nome predefinido da sua pasta do pacote para o nome do pacote que pretende. Para tal, mude o nome da pasta PkgFolder (ou PkgAssets) no painel Explorador de Soluções e, em seguida, edite o valor devolvido 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. Alterar o nome do pacote ao editar o valor devolvido sob a propriedade GetNameOfImport.

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

      Este valor devolvido é o nome do seu pacote que aparece na página de seleção do pacote no assistente do Dynamics 365 Package Deployer.

    9. Alterar a descrição do pacote ao editar o valor devolvido sob a propriedade GetImportPackageDescriptionText.

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

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

    10. Alterar o nome longo do pacote ao editar o valor devolvido sob a propriedade GetLongNameOfImport.

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

      O nome longo da embalagem aparece na página seguinte depois de selecionar o pacote a instalar.

  3. Adicionalmente, estão disponíveis para o pacote a seguinte função e variáveis:

    Nome Tipo Descrição
    CreateProgressItem(String) Function Utilizado para criar um novo item do progresso na interface do utilizador (IU).
    RaiseUpdateEvent(String, ProgressPanelItemStatus) Function Utilizado para atualizar o progresso criado pela chamada para CreateProgressItem(String).

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

    Em curso = 0
    Concluído = 1
    Com falhas = 2
    Aviso = 3
    Desconhecido = 4
    RaiseFailEvent(String, Exception) Function Utilizado para causar a falha da importação do estado atual com uma mensagem de exceção.
    IsRoleAssoicatedWithTeam(Guid, Guid) Function Utilizado para determinar se uma função está associada a uma equipa especificada.
    IsWorkflowActive(Guid) Function Utilizado para determinar se um fluxo de trabalho especificado está ativo.
    PackageLog Ponteiro de Classes Um ponteiro para a interface de registo inicializada para o pacote. Esta interface é utilizada por um pacote para registar mensagens e exceções no ficheiro de registo de pacotes.
    RootControlDispatcher Propriedade Uma interface de distribuidor utilizada para permitir que o controlo componha a sua própria IU durante a implementação do pacote. Utilize esta interface para encapsular quaisquer comandos ou elementos da IU. É importante verificar se esta variável tem valores nulos antes de a utilizar, uma vez que pode não ter sido definida com um valor.
    CrmSvc Propriedade Um ponteiro para a classe CrmServiceClient que permite que um pacote direcione o Dynamics 365 a partir do pacote. Utilize este ponteiro para executar 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, tal como importar dados de amostra, dados de ficheiros simples e dados exportados do Dataverse a partir da Ferramenta de Migração da Configuração. Especifique true ou false. A predefinição é false.
    OverrideDataImportSafetyChecks Propriedade Especifique se o Dynamics 365 Package Deployer ignora algumas das respetivas verificações de segurança, o que ajuda na melhoria do desempenho de importação. Especifique true ou false. A predefinição é false.

    Deve definir esta propriedade como true apenas se a instância do Dataverse de destino não contiver quaisquer dados.
  4. Guarde o seu projeto. O passo seguinte é compilar o pacote.

Compilar e implementar

As secções que se seguem descrevem como criar e implementar um pacote.

Compilar

A criação do seu pacote é descrita abaixo dependendo da ferramenta que está a usar.

Para criar um pacote criado com a CLI, pode carregar o ficheiro .csproj para o Visual Studio, mas, em vez disso, usaremos o comando dotnet e o MSBuild. O exemplo abaixo parte do princípio de que o diretório de trabalho contém o ficheiro *.csproj.

> dotnet publish

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

Opcionalmente, pode ver os detalhes do pacote compilado.

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

O seu pacote é composto pelos seguintes ficheiros na pasta <Project>\Bin\Debug.

  • Pasta <PackageName>: o nome da pasta é o mesmo que alterou para o nome da pasta do pacote no passo 2.g desta secção Adicionar código personalizado. Esta pasta contém todas as soluções, dados de configuração, ficheiros simples e os conteúdos para o pacote.

Nota

Poderá ver uma pasta .NET (por ex.: net472) que contém uma pasta pdpublish. O seu DLL e outros ficheiros de projeto estão nessa pasta pdpublish.

  • <PackageName>.dll: a assemblagem contém o código personalizado para o seu pacote. Por predefinição, o nome da assemblagem é igual ao nome do projeto.

Implementar

Depois de criar um pacote, pode implementá-lo na instância do Dataverse utilizando a ferramenta Package Deployer ou o Windows PowerShell ou um comando da CLI.

Melhores práticas

Em seguida, seguem-se algumas sugestões de melhores práticas quando trabalha com pacotes do Package Deployer.

Criar pacotes

Quando criar pacotes, os programadores têm de:

  • Certifique-se de que as assemblagens de pacote estão assinadas.

Implementar pacotes

Ao implementar pacotes, os administradores do Dataverse têm de:

  • Insistir em assemblagens de pacotes assinados para poder monitorizar uma assemblagem até à sua origem.
  • Testar o pacote numa instância de pré-produção, de preferência uma imagem de espelho da instância de produção antes de a executar numa instância de produção.
  • Fazer uma cópia de segurança da instância de produção antes de implementar o pacote.

Consulte também

Ferramenta Empacotador de Soluções