Поділитися через


Інструмент SolutionPackager

SolutionPackager — це інструмент, який може оборотно розкласти стиснений Microsoft Dataverse файл рішення на кілька XML-файлів та інші файли. Потім ви можете легко керувати цими файлами за допомогою системи керування джерелами. У наведених нижче розділах показано, як запустити цей інструмент та способи використання цього інструмента з керованими та некерованими рішеннями.

Де знайти інструмент SolutionPackager

Інструмент SolutionPackager розповсюджується в складі пакета Microsoft.CrmSdk.CoreTools NuGet. Щоб встановити програму, виконайте такі дії.

  1. Завантажити пакет. NuGet
  2. Перейменуйте розширення імені файлу пакета з .nupkg на .zip.
  3. Розпакуйте вміст стисненого (zip) файлу.

Ви знайдете виконуваний файл SolutionPackager.exe у <папці extracted-folder-name>/contents/bin/coretools. Запустіть програму з папки coretools або додайте цю папку до свого PATH.

Аргументи командного рядка SolutionPackager

SolutionPackager — це інструмент командного рядка, який можна викликати з параметрами, визначеними в наведеній нижче таблиці.

Аргумент Опис
/action: {Extract|Pack} Обов’язково. Дія, яку потрібно виконати. Цією дією може бути видобування ZIP-файлу рішення в папку або пакування папки в ZIP-файл.
/zipfile: <file path> Обов’язково. Шлях та ім’я ZIP-файлу рішення. При розпакуванні файл повинен існувати і бути читабельним. Під час пакування файл буде замінено.
/folder: <folder path> Обов’язково. Шлях до папки. Під час видобування ця папка створюється та заповнюється файлами компонентів. У разі пакування ця папка має вже існувати та містити попередньо видобуті файли компонентів.
/packagetype: {Unmanaged|Managed|Both} Необов'язково. Тип пакета для обробки. Значення за замовчуванням: "Некероване". Цей аргумент може бути пропущений у більшості випадків, оскільки тип пакета можна прочитати з ZIP-файлу або з файлів компонентів. Під час видобування, якщо вказано значення "Обидва", ZIP-файли керованого та некерованого рішення мають бути присутніми та обробляються в одну папку. Якщо вказано пакування та обидва, з однієї папки створюються керовані та некеровані .zip рішення файлів. Додаткові відомості див. в розділі про роботу з керованими та некерованими рішеннями в цій темі.
/allowWrite:{Yes|No} Необов'язково. Значення за промовчанням: Так. Цей аргумент використовується лише під час видобування. Якщо задано параметр /allowWrite:No, цей інструмент виконує всі операції, але не може записувати або видаляти будь-які файли. Операція видобування може бути безпечно оцінена без перезапису або видалення наявних файлів.
/allowDelete:{Yes|No|Prompt} Необов'язково. Значення за замовчуванням: "Prompt". Цей аргумент використовується лише під час видобування. Якщо задано параметр /allowDelete:Yes, всі файли, наявні в папці, яка вказана параметром /folder, що не очікуються, автоматично видаляються. Якщо вказано /allowDelete:No, вилучення не відбувається. Якщо задано параметр /allowDelete:Prompt, користувачу буде відображено консоль із запитом, яка дає змогу дозволити або відхилити всі операції видалення. Якщо вказано /allowWrite:No, вилучення не відбуватиметься, навіть якщо також вказано /allowDelete:Yes.
/clobber Необов'язково. Цей аргумент використовується лише під час видобування. Якщо задано параметр /clobber, файли, для яких задано атрибут лише для читання, буде перезаписано або видалено. Якщо не задано цей параметр, файли з атрибутом лише для читання не буде перезаписано або видалено.
/errorlevel: {Off|Error|Warning|Info|Verbose} Необов'язково. Значення за замовчуванням: "Info". Цей аргумент вказує на рівень даних журналювання для виводу.
/map: <file path> Необов'язково. Шлях і ім’я XML-файлу, що містить директиви із зіставлення файлів. У разі використання під час видобування файли, які зазвичай зчитуються з папки, указаної в параметрі /folder, зчитуються з альтернативних розташувань, указаних у файлі зіставлення. Під час операції пакування файли, що відповідають директивам, не записуються.
/nologo Необов'язково. Не показувати банер під час виконання.
/log: <file path> Необов'язково. Ім’я та шлях до файлу журналу. Якщо файл уже існує, до файлу додаються нові відомості журналювання.
@ <file path> Необов'язково. Ім’я та шлях до файлу, який містить аргументи командного рядка для цього інструмента.
/sourceLoc: <string> Необов'язково. Цей аргумент створює файл ресурсів шаблону та дійсний лише для видобування.

Можливими значеннями є auto або код LCID/ISO для мови, яку потрібно експортувати. Якщо цей аргумент використовується, рядок ресурсів із заданої мови видобувається як нейтральний RESX-файл. Якщо задано значення auto або лише довгу або коротку форму перемикача, використовується базова мова або рішення. Можна використовувати скорочену форму команди: /src.
/localize Необов'язково. Видобуває або об’єднує всі ресурси рядків в RESX-файли. Можна використовувати скорочену форму команди: /loc. Параметр локалізації підтримує спільні компоненти для файлів .resx. Додаткові відомості: Використання веб-ресурсів RESX.

Використовуйте аргумент команди /map

У наведеному нижче обговоренні докладно описано застосування аргументу /map до інструмента SolutionPackager.

Файли, вбудовані в автоматизовану систему створення, наприклад XAP-файли Silverlight і збірки компонентів plug-in, зазвичай не перевіряються в системі керування вхідним кодом. Веб-ресурси вже можуть бути присутніми в елементах керування вихідними кодами в розташуваннях, які безпосередньо не сумісні з інструментом SolutionPackager. Якщо додати параметр /map, інструмент SolutionPackager може бути спрямований на читання та пакування таких файлів з альтернативних розташувань, а не з папки видобування, як виконується зазвичай. Параметр /map повинен вказувати ім’я та шлях до XML-файлу, що містить директиви відображення. Ці директиви вказують SolutionPackager встановлювати відповідність між файлами за їхніми іменами та шляхом, а також вказують альтернативне місце для пошуку відповідного файлу. Зазначена нижче інформація стосується всіх директив однаково.

  • У списку може бути декілька директив, включно з директивами, які відповідають однаковим файлам. Директиви, перелічені на початку файлу, мають пріоритет над директивами, переліченими пізніше.

  • Якщо файл відповідає будь-якій директиві, вона має бути виявлена принаймні в одному альтернативному розташуванні. Якщо відповідних альтернатив не знайдено, SolutionPackager видає помилку.

  • Шляхи папок і файлів можуть бути абсолютними або відносними. Відносні шляхи завжди оцінюються з папки, вказаної у параметрі /folder.

  • Змінні середовища можна вказати за допомогою синтаксису %variable%.

  • Символ узагальнення теки "" може використовуватися у значенні "**у будь-якій підтеці". Його можна використовувати лише як кінцеву частину шляху, наприклад: "c:\folderA\**".

  • Символи узагальнення імен файлів можна використовувати лише у формах "*.ext" або “*.*”. Інші шаблони не підтримуються.

    Тут описано три типи зіставлень директив, а також приклад, в якому показано, як їх використовувати.

Зіставлення папок

У наведеній нижче інформації наведено докладні відомості про прив’язку папок.

Формат Xml

<Folder map="folderA" to="folderB" />

Опис

Шляхи до файлів, які відповідають "folderA", буде перемкнуто на "folderB".

  • Ієрархія вкладених папок для кожної з них має точно збігатися.

  • Символи узагальнення папок не підтримуються.

  • Не можна вказати імена файлів.

    Приклади

    <Folder map="folderA" to="folderB" />  
    <Folder map="folderA\folderB" to="..\..\folderC\" />  
    <Folder map="WebResources\subFolder" to="%base%\WebResources" />  
    

Зіставлення "файлу до файлу"

У наведеній нижче інформації наведено докладнішу інформацію про прив’язку файлу до файлу.

Формат Xml

<FileToFile map="path\filename.ext" to="path\filename.ext" />

Опис

Будь-який файл, який відповідає параметру map, буде прочитано з імені та шляху, вказаного в параметрі to.

Для параметра map:

  • Потрібно вказати ім’я файлу. Цей шлях необов’язковий. Якщо шлях не задано, можуть зіставлятися файли з будь-якої папки.

  • Символи узагальнення імені файлу не підтримуються.

  • Підтримується символ узагальнення папок.

    Для параметра to:

  • Потрібно вказати ім’я файлу та шлях до нього.

  • Ім’я файлу може відрізнятися від імені в параметрі map.

  • Символи узагальнення імені файлу не підтримуються.

  • Підтримується символ узагальнення папок.

Приклади

  <FileToFile map="assembly.dll" to="c:\path\folder\assembly.dll" />  
  <FileToFile map="PluginAssemblies\**\this.dll" to="..\..\Plugins\**\that.dll" />  
  <FileToFile map="Webresrouces\ardvark.jpg" to="%SRCBASE%\CrmPackage\WebResources\JPG format\aardvark.jpg" />  
  <FileToFile
    map="pluginpackages\cr886_PluginPackageTest\package\cr886_PluginPackageTest.nupkg"
    to="myplg\bin\Debug\myplg.1.0.0.nupkg" /> 

Зауважте, що у наведеному вище NuGet прикладі пакунка cr886_PluginPackageTest.nupkg не перезаписується, якщо файл вже існує у вказаному місці.

Зіставлення "файл до шляху"

Нижче наведено докладні відомості про зіставлення "файл до шляху".

Формат Xml

<FileToPath map="path\filename.ext" to="path" />

Опис

Будь-який файл, який відповідає параметру map, буде прочитано зі шляху, вказаного в параметрі to.

Для параметра map:

  • Потрібно вказати ім’я файлу. Цей шлях необов’язковий. Якщо шлях не задано, можуть зіставлятися файли з будь-якої папки.

  • Символи узагальнення імені файлу підтримуються.

  • Підтримується символ узагальнення папок.

Для параметра to:

  • Потрібно вказати шлях.

  • Підтримується символ узагальнення папок.

  • Ім’я файлу не потрібно вказувати.

    Приклади

  <FileToPath map="assembly.dll" to="c:\path\folder" />  
  <FileToPath map="PluginAssemblies\**\this.dll" to="..\..\Plugins\bin\**" />  
  <FileToPath map="*.jpg" to="%SRCBASE%\CrmPackage\WebResources\JPG format\" />  
  <FileToPath map="*.*" to="..\..\%ARCH%\%TYPE%\drop" />  

Приклад зіставлення

У наведеному нижче зразку коду XML показано повне зіставлення файлу, яке дає змогу інструменту SolutionPackager читати будь-який веб-ресурс, і дві створені за замовчуванням збірки з проекту засобів розробки, який називається CRMDevTookitSample.

<?xml version="1.0" encoding="utf-8"?>  
<Mapping>  
       <!-- Match specific named files to an alternate folder -->  
       <FileToFile map="CRMDevTookitSamplePlugins.dll" to="..\..\Plugins\bin\**\CRMDevTookitSample.plugins.dll" />  
       <FileToFile map="CRMDevTookitSampleWorkflow.dll" to="..\..\Workflow\bin\**\CRMDevTookitSample.Workflow.dll" />  
       <!-- Match any file in and under WebResources to an alternate set of sub-folders -->  
       <FileToPath map="WebResources\*.*" to="..\..\CrmPackage\WebResources\**" />  
       <FileToPath map="WebResources\**\*.*" to="..\..\CrmPackage\WebResources\**" />  
</Mapping>  

Керовані та некеровані рішення

Стиснутий файл (.zip) рішення Dataverse можна експортувати в один із двох типів, як показано тут.

Кероване рішення
Готове рішення, яке необхідно імпортувати в організацію. Після імпорту компоненти не можна додати або видалити, хоча за потреби можна додатково дозволити подальше настроювання. Це рекомендовано застосовувати, якщо розробку рішення завершено.

Некероване рішення
Відкрите рішення без обмежень, яке можна додавати, видаляти або змінювати. Цей тип рішення рекомендовано застосовувати під час розробки рішення.

Формат стиснутого файлу рішення буде відрізнятися залежно від його типу (кероване чи некероване). SolutionPackager може обробляти стиснуті файли рішень будь-якого типу. Проте цей інструмент не може перетворювати один тип на інший. Єдиний спосіб перетворити файли рішень на інший тип (наприклад, з некерованого на кероване) – імпорт ZIP-файлу некерованого рішення в сервер Dataverse, а потім експорт цього рішення як керованого рішення.

SolutionPackager може обробляти ZIP-файли некерованих і керованих рішень як комбінований набір за допомогою параметра /PackageType:Both. Для виконання цієї операції необхідно експортувати рішення двічі для кожного типу, називаючи ZIP-файли, як зазначено нижче.

ZIP-файл некерованого рішення: AnyName.zip ZIP-файл керованого рішення: AnyName_managed.zip

Цей інструмент буде вважати, що ZIP-файл керованого рішення присутній в тій самій папці, що й файл некерованого рішення, і розпаковуватиме обидва файли в одну папку, зберігаючи відмінності в яких існують керовані та некеровані компоненти.

Після видобування рішення як некерованого та керованого, можливо з цієї однієї папки упакувати обидва або кожен тип окремо, використовуючи параметр /PackageType, щоб указати, який тип потрібно створити. Якщо вказано обидва файли, буде створено два .zip файли з використанням правил іменування, як зазначено вище. Якщо параметр /PackageType відсутній під час пакування з подвійної папки керованого та некерованого рішень, за замовчуванням створюється один ZIP-файл некерованого рішення.

Виправлення неполадок

Якщо ви використовуєте Visual Studio для редагування файлів ресурсів, створених за допомогою пакувальника рішень, у разі перепакування ви можете отримати повідомлення, подібне до цього: “Failed to determine version id of the resource file <filename>.resx the resource file must be exported from the solutionpackager.exe tool in order to be used as part of the pack process.” Це відбувається, оскільки Visual Studio замінює теги метаданих файлу ресурсів на теги даних.

Альтернативний спосіб

  1. Відкрийте файл ресурсів в улюбленому текстовому редакторі та знайдіть і оновіть перелічені нижче теги.

    <data name="Source LCID" xml:space="preserve">  
    <data name="Source file" xml:space="preserve">  
    <data name="Source package type" xml:space="preserve">  
    <data name="SolutionPackager Version" mimetype="application/x-microsoft.net.object.binary.base64">  
    
    
  2. Змініть ім’я вузла з <data> на <metadata>.

    Наприклад, цей рядок:

    <data name="Source LCID" xml:space="preserve">  
      <value>1033</value>  
    </data>  
    
    

    Зміни в:

    <metadata name="Source LCID" xml:space="preserve">  
      <value>1033</value>  
    </metadata>  
    
    

    Це дозволяє пакувальнику рішень читати та імпортувати файл ресурсів. Ця проблема спостерігалася лише під час використання редактора ресурсів Visual Studio.

Статті за темою

Використання системи керування вхідним кодом із файлами рішень

Концепції рішень