Создание пакетов для средства Package Deployer

Package Deployer позволяет администраторам развертывать пакеты в экземплярах Microsoft Dataverse. Пакет Package Deployer может состоять из каких-либо или всех нижеперечисленных элементов.

  • Один или несколько файлов решения Dataverse.
  • Неструктурированные файлы или экспортированный файл данных конфигурации из средства миграции конфигурации. Дополнительные сведения об этом средстве см. в статье Перемещение данных конфигурации между экземплярами и организациями с помощью средства миграции конфигурации.
  • Пользовательский код, который может выполняться до, во время или после развертывания пакета в экземпляре Dataverse.
  • HTML-содержимое для пакета, которое можно отобразить в начале и в конце процесса развертывания. Это содержимое может быть полезно для предоставления описания решений и файлов, развертываемых в пакете.

Заметка

Существует еще один тип пакета, называемый пакетом подключаемого модуля. Такой вид пакетом предназначен для сборок, зависящих от подключаемых модулей, и не имеет отношения к пакетам Package Deployer.

Предварительные условия

  • Убедитесь, что у вас есть все файлы решения и другие файлы, которые вы хотите включить в пакет.
  • Visual Studio 2019 или позже или Visual Studio Code.

Обзор процесса

Чтобы создать пакет Package Deployer, выполните следующие действия.

  • Создание проекта Visual Studio или MSBuild
  • Добавление решений и других файлов в проект
  • Обновление предоставленных файлов HTML (необязательно)
  • Указание значений конфигурации для пакета
  • Определение пользовательского кода для пакета
  • Сборка и развертывание пакета

Эти шаги подробно описаны в данной статье.

Создание проекта пакета

Первым шагом является создание проекта Visual Studio или MSBuild для пакета. Для этого на вашем компьютере для разработки должно быть установлено одно из двух доступных расширений инструментов. При использовании Visual Studio Code установите интерфейс командной строки Microsoft Power Platform CLI. В противном случае, если используется Visual Studio 2019, установите Power Platform Tools для Visual Studio. Расширение Power Platform Tools в настоящее время доступно только для Visual Studio 2019. Однако созданный проект можно собрать с помощью Visual Studio 2019 или более новой версии.

Выберите соответствующую вкладку ниже, чтобы узнать, как создать проект с помощью нужного расширения инструмента. Оба инструмента выводят проект в одинаковом формате.

Выполните команду pac package init для создания исходного пакета. Дополнительная информация: pac package

pac package init help
pac package init --outputDirectory DeploymentPackage

Результирующий вывод интерфейса командной строки содержит папки и файлы, показанные ниже. Имя папки «DeploymentPackage» здесь использовано в качестве примера.

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

В созданном проекте найдите файл конфигурации ImportConfig.xml в папке PkgAssets и файл PackageImportExtension.cs. Вы измените эти файлы, как будет описано далее в этой статье.

Добавление файлов пакета

После того как вы создали проект пакета, вы можете начать добавлять решения и другие файлы в этот проект.

При использовании интерфейса командной строки вы можете добавлять внешние пакеты, решения и ссылки в проект пакета с помощью одной из подкоманд добавить. Введите pac package help, чтобы увидеть список подкоманд. Давайте добавим решение в наш пакет.

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

Настройка пакета

  1. Определите конфигурацию пакета, добавив информацию о вашем пакете в файл ImportConfig.xml в проекте. Откройте файл для редактирования. Следующий список содержит информацию о каждом параметре и узле в файле конфигурации.

    installsampledata
    True или false. Если true, устанавливает образцы данных в экземпляр Dataverse. Эти данные — это те же самые образцы данных, которые вы можете установить из области Параметры>Управление данными в Dataverse.

    waitforsampledatatoinstall
    True или false. Если true, и если параметр installsampledata также имеет значение true, ждет установки образца данных перед развертыванием пакета.

    Заметка

    Убедитесь, что вы установили для параметра installsampledata значение true, если вы устанавливаете для параметра waitforsampledatatoinstall значение true.

    agentdesktopzipfile
    Имя ZIP-файла для распаковки. Если вы укажете здесь имя файла .zip, будет добавлен экран во время процесса развертывания пакета, который предложит вам выбрать место, куда вы хотите распаковать содержимое файла.

    Этот атрибут обычно используется для создания пакетов для Unified Service Desk для Dynamics 365. Дополнительные сведения об Unified Service Desk см. в Руководстве по администрированию Unified Service Desk 3.0.

    agentdesktopexename
    Имя файла .exe или .msi в ZIP-файле или URL-адрес, который будет вызван в конце процесса развертывания.

    Этот атрибут обычно используется для создания пакетов для Unified Service Desk.

    crmmigdataimportfile
    Имя файла данных конфигурации по умолчанию (.zip), экспортированного с помощью средства миграции конфигурации.

    • Вы также можете импортировать локализованную версию файла данных конфигурации на основе кода языка (LCID), указанного с использованием новых параметров времени выполнения при запуске средства Package Deployer. Используйте узел <cmtdatafile> (поясняется позже), чтобы указать локализованные версии файла данных конфигурации в пакете, затем используйте метод OverrideConfigurationDataFileLanguage (поясняется позже), чтобы указать логику для импорта файла данных конфигурации на основе кода языка, указанного в параметрах среды выполнения. Вы не можете одновременно импортировать более одного файла данных конфигурации, используя пакет.

    • Для Dataverse (локальная среда): если ваш файл данных конфигурации содержит информацию о пользователе, а исходный и целевой экземпляры Dataverse находятся в одном домене Active Directory, информация о пользователе импортируется в целевой экземпляр Dataverse. Чтобы импортировать информацию пользователя в экземпляр Dataverse (on-premises) в другом домене, вы должны включить в свой проект файл сопоставления пользователей (.xml), созданный с помощью средства миграции конфигурации, и указать его вместе с файлом данных конфигурации, используя атрибут usermapfilename в узле <cmtdatafile>, который объясняется далее. Информация о пользователе не может быть импортирована в экземпляры Dataverse.
      Узел <solutions>
      Содержит массив узлов <configsolutionfile>, которые описывают решения для импорта. Порядок решений в этом узле указывает порядок, в котором решения будут импортированы в целевой экземпляр Dataverse.

      Узел <configsolutionfile>
      Используйте этот узел под узлом <solutions> для указания отдельных решений и следующей информации для каждого импортируемого решения:

    • solutionpackagefilename: укажите имя файла .zip вашего решения. Обязательное.

    • overwriteunmanagedcustomizations: укажите, следует ли перезаписывать какие-либо неуправляемые настройки при импорте решения, которое уже существует в целевом экземпляре Dynamics 365. Этот атрибут необязателен, и если вы не укажете его, то по умолчанию неуправляемые настройки в существующем решении сохраняются в целевом экземпляре Dynamics 365.

    • publishworkflowsandactivateplugins: укажите, следует ли публиковать рабочие процессы и активировать подключаемые модули в целевом экземпляре Dynamics 365 после импорта решения. Этот атрибут необязателен, и если вы не укажете его, то по умолчанию бизнес-процессы публикуются, а подключаемые модули активируются после импорта решения в целевой экземпляр Dynamics 365.

      Вы можете добавить несколько имен файлов решений в пакет, добавив соответствующее количество узлов <configsolutionfile>. Например, если вы хотите импортировать три файла решения, добавьте их, как показано ниже:

    
    <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> и <zipimportdetails>, которые используются для описания отдельных файлов и zip-файлов соответственно для импорта.

    Узел <configimportfile>
    Используйте этот узел под узлом <configimportfile> для описания файла, который будет импортирован в Dataverse. Вы можете добавить несколько файлов в пакет, добавив соответствующее количество узлов <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>  
    
    

    Ниже приведен список поддерживаемых атрибутов:

    Атрибут Description
    filename Имя файла, который содержит данные импорта. Если файл является файлом .zip, узел <zipimportdetails> должен присутствовать с узлом <zipimportdetail> для каждого файла в файле .zip.
    filetype Это значение может быть CSV, XML или ZIP.
    associatedmap Имя сопоставления данных импорта Dataverse для использования с этим файлом. Если пустое, пытается использовать определенное системой имя сопоставления данных импорта для этого файла.
    importtoentity Может быть именем файла EXE в ZIP-файле, URL-адресом или файлом .msi для предоставления ссылки для вызова в конце процесса.
    datadelimiter Имя разделителя данных, используемого в файле импорта. Допустимые значения: одинарная кавычка или двойные кавычки.
    fielddelimiter Имя разделителя полей, используемого в файле импорта. Допустимые значения: запятая, двоеточие или одинарная кавычка.
    enableduplicatedetection Указывает, требуется ли включить правила обнаружение повторяющихся записей при импорте данных. Допустимые значения — true или false.
    isfirstrowheader Используется для обозначения того, что первая строка файла импорта содержит имена полей. Допустимые значения — true или false.
    isrecordownerateam Указывает, должен ли владелец записи при импорте быть рабочей группой. Допустимые значения — true или false.
    owneruser Указывает идентификатор пользователя, которому должны принадлежать записи. Значением по умолчанию является текущий вошедший пользователь.
    waitforimporttocomplete Если true, система ожидает завершения импорта, прежде чем продолжить. Если false, она ставит задания в очередь и движется дальше.

    Узел <zipimportdetails>
    Этот узел содержит массив узлов <zipimportdetail>, которые описывают файлы, включенные в ZIP-файл, который используется для импорта в Dynamics 365.

    Узел <zipimportdetail>
    Используйте этот узел под узлом <zipimportdetails> для предоставления информации об отдельном файле в файле .zip, который указан в узле <configimportfile>.

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

    Поддерживаемые атрибуты перечислены ниже:

    Атрибут Description
    filename Имя файла, который содержит данные импорта.
    filetype Это значение может быть CSV или XML.
    importtoentity Может быть именем файла EXE в ZIP-файле, URL-адресом или файлом .msi для предоставления ссылки для вызова в конце процесса.

    Узел <filesmapstoimport>
    Этот узел содержит массив узлов <configmapimportfile> для импорта. Порядок файлов сопоставления в этом узле указывает порядок, в котором они импортируются. Для получения информации о сопоставлениях данных см. раздел Создание сопоставлений данных для импорта.

    Узел <configimportmapfile>
    Используйте этот узел под узлом <filesmapstoimport> для предоставления информации об отдельном файле сопоставления для импорта в Dataverse.

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

    Узел <cmtdatafiles>
    Этот узел содержит массив узлов <cmtdatafile>, которые содержат локализованную версию файла данных конфигурации для импорта.

    Узел <cmtdatafile>
    Используйте этот узел под узлом <cmtdatafiles> для указания локализованных файлов данных конфигурации вместе с кодом языка (обязательно) и файлом сопоставления информации о пользователе (необязательно). Например:

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

    Вы можете определить свою собственную логику в методе OverrideConfigurationDataFileLanguage (объясняется позже), чтобы импортировать локализованный файл данных конфигурации вместо файла по умолчанию (заданного в crmmigdataimportfile) на основе значения кода языка (LCID), указанного с помощью параметров среды выполнения (поясняется позже).

  2. Выберите Сохранить все.

    Ниже представлено xml-содержимое файла примера ImportConfig.xml.

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

Добавление пользовательского кода

Вы можете добавить пользовательский код, который выполняется до, во время и после импорта пакета в среду. Для этого следуйте приведенным ниже инструкциям.

  1. Внесите изменения в файл PackageTemplate.cs (или PackageImportExtension.cs) в корневой папке проекта.

  2. В файле C# вы можете сделать следующее:

    1. Ввести пользовательский код для выполнения при инициализации пакета в определении переопределения метода InitializeCustomExtension.

      Этот метод может использоваться, чтобы позволить пользователям использовать параметры среды выполнения при запуске пакета. Как разработчик, вы можете добавить поддержку любого параметра среды выполнения в ваш пакет, используя свойство RuntimeSettings, если у вас есть код для его обработки на основе ввода пользователя.

      Например, следующий пример кода включает параметр среды выполнения, называемый SkipChecks, для пакета, который имеет два возможных значения: true или false. Пример кода проверяет, указал ли пользователь какие-либо параметры среды выполнения при запуске Package Deployer (с помощью командной строки или PowerShell), а затем соответственно обрабатывает информацию. Если во время выполнения пакета пользователь не указал параметр среды выполнения, значение свойства RuntimeSettings будет 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");  
      }  
      

      Этот код позволяет администратору использовать командную строку или командлет Import-CrmPackage, чтобы указать, следует ли пропустить проверки безопасности при запуске инструмента Package Deployer для импорта пакета. Дополнительные сведения Развертывание пакетов с помощью Package Deployer и Windows PowerShell

    2. Введите пользовательский код для выполнения до импорта решений в определении переопределения метода PreSolutionImport, чтобы указать, следует ли сохранять или перезаписывать настройки при обновлении указанного решения в целевом экземпляре Dataverse, и нужно ли автоматически активировать подключаемые модули и рабочие процессы.

    3. Используйте определение метода переопределения RunSolutionUpgradeMigrationStep, чтобы выполнить преобразование или обновление данных между двумя версиями решения. Этот метод вызывается, только если импортируемое решение уже присутствует в целевом экземпляре Dataverse.

      Эта функция ожидает следующие параметры:

      Параметр Описание
      solutionName Имя решения
      oldVersion Номер версии старого решения
      newVersion Номер версии нового решения
      oldSolutionId GUID старого решения.
      newSolutionId GUID нового решения.
    4. Ввести пользовательский код до завершения импорта решения в определении переопределения метода BeforeImportStage. Образцы данных и некоторые неструктурированные файлы для решений, указанных в файле ImportConfig.xml, импортируются до завершения импорта решения.

    5. Переопределите текущий выбранный язык для импорта данных конфигурации, используя определение метода переопределения OverrideConfigurationDataFileLanguage. Если указанный код языка (LCID) указанного языка не найден в списке доступных языков в пакете, импортируется файл данных по умолчанию.

      Вы указываете доступные языки для данных конфигурации в узле <cmtdatafiles> в файле ImportConfig.xml. Файл импорта данных конфигурации по умолчанию указан в атрибуте crmmigdataimportfile в файле ImportConfig.xml.

      Пропуск проверок данных (OverrideDataImportSafetyChecks = true) может быть эффективным здесь, если вы уверены, что целевой экземпляр Dataverse не содержит никаких данных.

    6. Ввести пользовательский код после завершения импорта в определении переопределения метода AfterPrimaryImport>. Остальные неструктурированные файлы, которые не были импортированы ранее, до начала импорта решения, импортируются сейчас.

    7. Измените имя по умолчанию вашей папки пакета на имя пакета, которое вы хотите. Для этого переименуйте папку PkgFolder (или PkgAssets) на панели Обозреватель решений, затем отредактируйте возвращаемое значение в свойстве 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. Измените имя пакета, отредактировав возвращаемое значение в свойстве GetNameOfImport.

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

      Это возвращаемое значение представляет собой имя вашего пакета, которое отображается на странице выбора пакета в мастере Dynamics 365 Package Deployer.

    9. Измените описание пакета, отредактировав возвращаемое значение в свойстве GetImportPackageDescriptionText.

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

      Это возвращаемое значение представляет собой описание пакета, которое отображается вместе с именем пакета на странице выбора пакета в мастере Package Deployer.

    10. Измените длинное имя пакета, отредактировав возвращаемое значение в свойстве GetLongNameOfImport.

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

      Длинное имя пакета появляется на следующей странице после того, как вы выбрали пакет для установки.

  3. Кроме того, для пакета доступны следующие функции и переменные:

    Имя (название) Тип Описание
    CreateProgressItem(String) Function Используется для создания нового элемента хода выполнения в пользовательском интерфейсе.
    RaiseUpdateEvent(String, ProgressPanelItemStatus) Function Используется для обновления хода выполнения, созданного вызовом CreateProgressItem(String).

    ProgressPanelItemStatus — это перечисление со следующими значениями:

    Идет работа = 0
    Завершено = 1
    Ошибка = 2
    Предупреждение = 3
    Неизвестно = 4
    RaiseFailEvent(String, Exception) Function Используется для задания ошибки импорта текущего состояния с сообщением об исключении.
    IsRoleAssoicatedWithTeam(Guid, Guid) Function Используется для определения, связана ли роль с указанной рабочей группой.
    IsWorkflowActive(Guid) Function Используется для определения, активен ли указанный рабочий процесс.
    PackageLog Указатель класса Указатель на инициализированный интерфейс ведения журнала для пакета. Этот интерфейс используется пакетом для регистрации сообщений и исключений в файле журнала пакета.
    RootControlDispatcher Свойство Интерфейс диспетчера, который позволяет вашему элементу управления отображать собственный интерфейс пользователя во время развертывания пакета. Используйте этот интерфейс для упаковки любых элементов или команд пользовательского интерфейса. Важно проверить эту переменную на наличие значений NULL, прежде чем использовать ее, так как для нее может быть не установлено значение.
    CrmSvc Свойство Указатель на класс CrmServiceClient, который позволяет пакету обращаться к Dynamics 365 из пакета. Используйте этот указатель для выполнения методов SDK и других действий в переопределенных методах.
    DataImportBypass Свойство Укажите, будет ли средство Dynamics 365 Package Deployer пропускать все операции импорта данных, такие как импорт демонстрационных данных Dataverse, данные неструктурированных файлов и данные, экспортированные из средства миграции конфигурации. Укажите true или false. По умолчанию — false.
    OverrideDataImportSafetyChecks Свойство Укажите, пропускает ли Dynamics 365 Package Deployer некоторые свои проверки безопасности, что помогает улучшить производительность импорта. Укажите true или false. По умолчанию — false.

    Вы должны устанавливать для этого свойства значение true, только если целевой экземпляр Dataverse не содержит никаких данных.
  4. Сохраните проект. Следующим шагом является сборка пакета.

Сборка и развертывание

В следующих разделах описывается, как собрать и развернуть пакет.

Сборка

Сборка пакета описана ниже в зависимости от того, какой инструмент вы используете.

Чтобы выполнить сборку созданного пакета с помощью интерфейса командной строки, можно было бы загрузить файл .csproj в Visual Studio, но вместо этого мы будем использовать команду dotnet и MSBuild. В приведенном ниже примере предполагается, что рабочий каталог содержит файл *.csproj.

> dotnet publish

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

При желании вы можете посмотреть детали собранного пакета.

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

Ваш пакет состоит из следующих файлов в папке <Project>\Bin\Debug.

  • Папка <PackageName>: имя папки совпадает с именем, которое вы изменили для имени папки пакета в шаге 2.g этого раздела Добавление собственного кода. Эта папка содержит все решения, данные конфигурации, неструктурированные файлы и содержимое для вашего пакета.

Заметка

Вы можете увидеть папку .NET (например, net472), содержащую папку pdpublish. Ваша библиотека DLL и другие файлы проекта находятся в этой папке pdpublish.

  • <PackageName>.dll: сборка, содержащая пользовательский код для вашего пакета. По умолчанию имя сборки совпадает с именем проекта.

Развернуть

После создания пакета его можно развернуть в экземпляре Dataverse, используя инструмент Package Deployer, Windows PowerShell или команду интерфейса командной строки.

  • Для развертывания с помощью инструмента Package Deployer сначала загрузите инструмент, как описано в разделе Инструменты разработки Dataverse. Далее руководствуйтесь подробной информацией по развертыванию пакетов в статье Развертывание пакетов с помощью Package Deployer или Windows PowerShell.

  • Для развертывания с помощью интерфейса командной строки используйте команду pac package deploy.

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

    Заметка

    Чтобы развернуть пакет в целевой среде с помощью интерфейса командной строки, необходимо сначала настроить профиль проверки подлинности и выбрать организацию. Дополнительная информация: pac auth create, pac org select

Рекомендации

Ниже перечислены несколько практических советов, которым следует следовать при работе с пакетами Package Deployer.

Создание пакетов

При создании пакетов разработчики должны:

  • Убедиться, что сборки пакетов подписаны.

Развертывание пакетов

При развертывании пакетов администраторы Dataverse должны:

  • Настаивать на сборках пакетов с подписью, чтобы вы могли отследить источник сборки.
  • Проверить пакет на экспериментальном экземпляре (желательно, чтобы он был зеркальным образом производственного экземпляра) перед запуском его на производственном экземпляре.
  • Создать резервную копию рабочего экземпляра перед развертыванием пакета.

См. также

Средство "Упаковщик решений"