Create packages for the Package Deployer tool - Power Platform (2024)

  • Article

Package Deployer lets administrators deploy packages on Microsoft Dataverse instances. A Package Deployer package can consist of any or all of the following:

  • One or more Dataverse solution files.
  • Flat files or exported configuration data file from the Configuration Migration tool. For more information about the tool, see Move configuration data across instances and organizations with the Configuration Migration tool.
  • Custom code that can run before, while, or after the package is deployed to the Dataverse instance.
  • HTML content specific to the package that can display at the beginning and end of the deployment process. This content can be useful to provide a description of the solutions and files that are deployed in the package.

Note

There is another package type called a plug-in package. That kind of package is for plug-in dependent assemblies and has no relationship with Package Deployer packages.

Prerequisites

  • Ensure that you have all the solution and other files ready that you want to include in the package.
  • Visual Studio 2019 or later, or Visual Studio Code.

Process overview

To create a Package Deployer package, perform the following steps.

  • Create a Visual Studio or MSBuild project
  • Add solutions and other files to the project
  • Update provided HTML files (optional)
  • Specify configuration values for the package
  • Define custom code for the package
  • Build and deploy the package

These steps are described in detail in this article.

Create a package project

The first step is to create a Visual Studio or MSBuild project for the package. To do that, you must have one of two available tool extensions installed on your development computer. If using Visual Studio Code, install Microsoft Power Platform CLI. Otherwise, if using Visual Studio 2019 or later, install Power Platform tools for Visual Studio.

Select the appropriate tab below to find out how to create a project using the desired tool extension. Both tools output the project in a similar format.

  • Power Platform CLI
  • Power Platform tools

Run the pac package init command to create the initial package. More information: pac package

pac package init helppac package init --outputDirectory DeploymentPackage

The resulting CLI output contains the folders and files shown below. The "DeploymentPackage" folder name was used here as an example.

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

In the created project, find the ImportConfig.xml configuration file in the PkgAssets folder and the PackageImportExtension.cs file. You'll modify these files as described later in this article.

Add package files

After you have created a package project, you can begin adding solutions and other files to that project.

  • Power Platform CLI
  • Power Platform tools

When using the CLI, you can add external packages, solutions, and references to your package project using one of the add subcommands. Enter pac package help to see the list of subcommands. Let's add a solution to our package.

> pac package add-solution helpCommands: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.zipThe item was added successfully.

Configure the package

Define the package configuration by adding information about your package in the ImportConfig.xml file in the project. Refer to ImportConfig Reference for an example and descriptions of the valid elements and attributes to use.

Add custom code

You can add custom code that executes before, during, and after the package is imported into an environment. To do so, follow these instructions.

  1. Edit the PackageTemplate.cs (or PackageImportExtension.cs) file in the project's root folder.

  2. In the C# file, you can:

    1. Enter custom code to execute when the package is initialized in the override method definition of InitializeCustomExtension.

      This method can be used to let users use the runtime parameters while running a package. As a developer, you can add support for any runtime parameter to your package by using the RuntimeSettings property as long as you have code to process it based on the user input.

      For example, the following sample code enables a runtime parameter called SkipChecks for the package that has two possible values: true or false. The sample code checks if the user has specified any runtime parameters while running Package Deployer (either by using the command line or PowerShell), and then accordingly processes the information. If no runtime parameter is specified by the user while running the package, the value of the RuntimeSettings property will be 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"); } 

      This code enables the administrator use the command line or the Import-CrmPackage cmdlet to specify whether to skip the safety checks while running the Package Deployer tool to import the package. More information: Deploy packages using Package Deployer and Windows PowerShell

    2. Enter custom code to execute before the solutions are imported in the override method definition of PreSolutionImport to specify whether to maintain or overwrite customizations while updating the specified solution in a target Dataverse instance, and whether to automatically activate plug-ins and workflows.

    3. Use the override method definition of RunSolutionUpgradeMigrationStep to perform data transformation or upgrade between two versions of a solution This method is called only if the solution you're importing is already present in the target Dataverse instance.

      This function expects the following parameters:

      ParameterDescription
      solutionNameName of the solution
      oldVersionVersion number of the old solution
      newVersionVersion number of the new solution
      oldSolutionIdGUID of the old solution.
      newSolutionIdGUID of the new solution.
    4. Enter custom code to execute before the solution import completes in the override definition of the BeforeImportStage method. The sample data and some flat files for solutions specified in the ImportConfig.xml file are imported before the solution import completes.

    5. Override the currently selected language for configuration data import using the override method definition of OverrideConfigurationDataFileLanguage. If the specified locale ID (LCID) of the specified language isn't found in the list of available languages in the package, the default data file is imported.

      You specify the available languages for the configuration data in the <cmtdatafiles> node in the ImportConfig.xml file. The default configuration data import file is specified in the crmmigdataimportfile attribute in the ImportConfig.xml file.

      Skipping data checks (OverrideDataImportSafetyChecks = true) can be effective here if you're sure that the target Dataverse instance doesn't contain any data.

    6. Enter custom code to execute after the import completes in the override definition of AfterPrimaryImport>method. The remaining flat files that weren't imported earlier, before the solution import started, are imported now.

    7. Change the default name of your package folder to the package name that you want. To do so, rename the PkgFolder (or PkgAssets) folder in the Solution Explorer pane, and then edit the return value under the GetImportPackageDataFolderName property.

      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. Change the package name by editing the return value under the GetNameOfImport property.

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

      This returned value is the name of your package that appears on the package selection page in the Dynamics 365 Package Deployer wizard.

    9. Change the package description by editing the return value under the GetImportPackageDescriptionText property.

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

      This returned value is the package description that appears alongside the package name on the package selection page in the Package Deployer wizard.

    10. Change the package long name by editing the return value under the GetLongNameOfImport property.

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

      The package long name appears on the next page after you have selected the package to install.

  3. Additionally, the following function and variables are available to the package:

    NameTypeDescription
    CreateProgressItem(String)FunctionUsed to create a new progress item in the user interface (UI).
    RaiseUpdateEvent(String, ProgressPanelItemStatus)FunctionUsed to update the progress created by the call to CreateProgressItem(String).

    ProgressPanelItemStatus is an enum with the following values:

    Working = 0
    Complete = 1
    Failed = 2
    Warning = 3
    Unknown = 4

    RaiseFailEvent(String, Exception)FunctionUsed to fail the current status import with an exception message.
    IsRoleAssoicatedWithTeam(Guid, Guid)FunctionUsed to determine if a role is associated with a specified team.
    IsWorkflowActive(Guid)FunctionUsed to determine if a specified workflow is active.
    PackageLogClass PointerA pointer to the initialized logging interface for the package. This interface is used by a package to log messages and exceptions to the package log file.
    RootControlDispatcherPropertyA dispatcher interface used to allow your control to render its own UI during package deployment. Use this interface to wrap any UI elements or commands. It's important to check this variable for null values before using it as it might not be set to a value.
    CrmSvcPropertyA pointer to CrmServiceClient class that allows for a package to address Dynamics 365 from within the package. Use this pointer to execute SDK methods and other actions in the overridden methods.
    DataImportBypassPropertySpecify whether Dynamics 365 Package Deployer skips all data import operations such as importing Dataverse sample data, flat file data, and data exported from the Configuration Migration tool. Specify true or false. Default is false.
    OverrideDataImportSafetyChecksPropertySpecify whether Dynamics 365 Package Deployer bypasses some of its safety checks, which helps in improving the import performance. Specify true or false. Default is false.

    You should set this property to true only if the target Dataverse instance doesn't contain any data.

  4. Save your project. The next step is to build the package.

Build and deploy

The following sections describe how to build and deploy a package.

Build

Building your package is described below depending on which tool you're using.

  • Power Platform CLI
  • Power Platform tools

To build a package created with the CLI, you could load the .csproj file into Visual Studio, but instead we're going to use the dotnet command and MSBuild. The example below assumes the working directory contains the *.csproj file.

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

You can optionally look at the details of the built package.

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

Your package is made of the following files under the <Project>\Bin\Debug folder.

  • <PackageName> folder: The folder name is the same as the one you changed for your package folder name in step 2.g of this section Add custom code. This folder contains all solutions, configuration data, flat files, and the contents for your package.

Note

You may see a .NET folder (e.g, net472) containing a pdpublish folder. Your DLL and other project files are in that pdpublish folder.

  • <PackageName>.dll: The assembly contains the custom code for your package. By default, the name of the assembly is the same as your project name.

Deploy

After you create a package, you can deploy it on the Dataverse instance by using the Package Deployer tool, Windows PowerShell, or a CLI command.

  • To deploy using the Package Deployer tool, first download the tool as described in Dataverse development tools. Next, follow the detailed information on package deployment in the article Deploy packages using Package Deployer or Windows PowerShell.

  • To deploy using the CLI, use the pac package deploy command.

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

    Note

    To deploy a package to a target environment using the CLI, you must first set up an authentication profile and select an organization. More information: pac auth create, pac org select

Best practices

Listed below are a few best practice tips to follow when working with Package Deployer packages.

Creating packages

When creating packages, developers must:

  • Ensure that package assemblies are signed.

Deploying packages

When deploying packages, Dataverse administrators must:

  • Insist on signed package assemblies so that you can track an assembly back to its source.
  • Test the package on a preproduction instance, preferably a mirror image of the production instance, before running it on a production instance.
  • Back up the production instance before deploying the package.

See also

Solution Packager tool

Create packages for the Package Deployer tool - Power Platform (2024)
Top Articles
Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance
Principles of Assessment – Part 4 (Validity) - International Teacher Training Academy (Australia)
Edina Omni Portal
Moon Stone Pokemon Heart Gold
Archived Obituaries
Jonathon Kinchen Net Worth
La connexion à Mon Compte
Gabrielle Abbate Obituary
Notary Ups Hours
Mikayla Campino Video Twitter: Unveiling the Viral Sensation and Its Impact on Social Media
Nestle Paystub
Infinite Campus Parent Portal Hall County
Jessica Renee Johnson Update 2023
World Cup Soccer Wiki
Drago Funeral Home & Cremation Services Obituaries
Available Training - Acadis® Portal
Bend Pets Craigslist
Canvas Nthurston
Conan Exiles: Nahrung und Trinken finden und herstellen
Cincinnati Adult Search
Hood County Buy Sell And Trade
Bòlèt Florida Midi 30
The Listings Project New York
2487872771
Rogue Lineage Uber Titles
Apparent assassination attempt | Suspect never had Trump in sight, did not get off shot: Officials
Dal Tadka Recipe - Punjabi Dhaba Style
Harrison 911 Cad Log
How rich were the McCallisters in 'Home Alone'? Family's income unveiled
Imagetrend Elite Delaware
Busch Gardens Wait Times
Wheeling Matinee Results
2430 Research Parkway
Khatrimmaza
Springfield.craigslist
Sitting Human Silhouette Demonologist
Umiami Sorority Rankings
Jewish Federation Of Greater Rochester
Wayne State Academica Login
Updates on removal of DePaul encampment | Press Releases | News | Newsroom
Janaki Kalaganaledu Serial Today Episode Written Update
Courses In Touch
boston furniture "patio" - craigslist
Satucket Lectionary
Shell Gas Stations Prices
303-615-0055
Game Like Tales Of Androgyny
Glowforge Forum
Land of Samurai: One Piece’s Wano Kuni Arc Explained
All Obituaries | Roberts Funeral Home | Logan OH funeral home and cremation
Cataz.net Android Movies Apk
Latest Posts
Article information

Author: Maia Crooks Jr

Last Updated:

Views: 6583

Rating: 4.2 / 5 (63 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Maia Crooks Jr

Birthday: 1997-09-21

Address: 93119 Joseph Street, Peggyfurt, NC 11582

Phone: +2983088926881

Job: Principal Design Liaison

Hobby: Web surfing, Skiing, role-playing games, Sketching, Polo, Sewing, Genealogy

Introduction: My name is Maia Crooks Jr, I am a homely, joyous, shiny, successful, hilarious, thoughtful, joyous person who loves writing and wants to share my knowledge and understanding with you.