Создание пакета из Visual Studio

При разработке сборок для публикации в виде пакета для Dynamo можно настроить проект таким образом, чтобы сгруппировать все необходимые компоненты и поместить их в структуру папок, совместимую с пакетом. Это позволит быстро протестировать проект в виде пакета и смоделировать работу пользователя.

Сборка в папку пакета

Существует два способа сборки пакета в Visual Studio.

  • Добавьте события после сборки в диалоговом окне «Параметры проекта», в котором для копирования необходимых файлов используются сценарии xcopy или Python.

  • Используйте целевой объект сборки AfterBuild в файле .csproj для создания задач копирования файлов и каталогов.

Метод AfterBuild предпочтителен для этих типов операций (в том числе в данном руководстве), так как он не зависит от копирования файлов, которые могут быть недоступны на компьютере сборки.

Копирование файлов пакетов с помощью метода AfterBuild

Настройте структуру папок в репозитории так, чтобы исходные файлы были отделены от файлов пакетов. При работе с примером CustomNodeModel поместите проект Visual Studio и все связанные файлы в новую папку src. Все пакеты, созданные в проекте, будут сохранены в этой папке. Структура папок должна выглядеть следующим образом:

CustomNodeModel
> src
  > CustomNodeModel
  > CustomNodeModelFunction
  > packages
  > CustomNodeModel.sln
  1. Переместите файлы проекта в новую папку src.

Теперь, когда исходные файлы находятся в отдельной папке, добавьте целевой объект AfterBuild в файл CustomNodeModel.csproj в Visual Studio. При этом необходимые файлы будут скопированы в новую папку пакета. Откройте файл CustomNodeModel.csproj в текстовом редакторе (мы использовали Atom) и поместите цель сборки перед закрывающим тегом </Project>. Целевой объект AfterBuild скопирует все файлы DLL, PBD, XML и CONFIG в новую папку bin и создаст папку dyf и дополнительные папки.

  <Target Name="AfterBuild">
    <ItemGroup>
      <Dlls Include="$(OutDir)*.dll" />
      <Pdbs Include="$(OutDir)*.pdb" />
      <Xmls Include="$(OutDir)*.xml" />
      <Configs Include="$(OutDir)*.config" />
    </ItemGroup>
    <Copy SourceFiles="@(Dlls)" DestinationFolder="$(SolutionDir)..\packages\CustomNodeModel\bin\" />
    <Copy SourceFiles="@(Pdbs)" DestinationFolder="$(SolutionDir)..\packages\CustomNodeModel\bin\" />
    <Copy SourceFiles="@(Xmls)" DestinationFolder="$(SolutionDir)..\packages\CustomNodeModel\bin\" />
    <Copy SourceFiles="@(Configs)" DestinationFolder="$(SolutionDir)..\packages\CustomNodeModel\bin\" />
    <MakeDir Directories="$(SolutionDir)..\packages\CustomNodeModel\dyf" />
    <MakeDir Directories="$(SolutionDir)..\packages\CustomNodeModel\extra" />
  </Target>

Необходимо убедиться, что целевой объект добавлен в файл CustomNodeModel.csproj (а не в другой файл проекта) и что в проекте нет параметров, заданных после сборки.

  1. Поместите целевой объект AfterBuild перед закрывающим тегом </Project>.

В разделе <ItemGroup> задается ряд переменных, представляющих определенные типы файлов. Например, переменная Dll представляет все файлы в выходной папке с расширением .dll.

<ItemGroup>
  <Dlls Include="$(OutDir)*.dll" />
</ItemGroup>

Задача Copy состоит в том, чтобы скопировать все файлы .dll в каталог, а именно в папку пакета, в которую мы выполняем сборку.

<Copy SourceFiles="@(Dlls)" DestinationFolder="$(SolutionDir)..\packages\CustomNodeModel\bin\" />

Пакеты Dynamo обычно содержат папку dyf и extra для пользовательских узлов Dynamo и других компонентов, например изображений. Чтобы создать эти папки, необходимо использовать задачу MakeDir. Если папка отсутствует, эта задача создаст ее. В эту папку можно добавить файлы вручную.

<MakeDir Directories="$(SolutionDir)..\packages\CustomNodeModel\extra" />

Теперь при построении проекта в папке проекта будет находится папка packages рядом с ранее созданной папкой src. В каталоге packages находится папка, содержащая все необходимые для пакета компоненты. Также необходимо скопировать файл pkg.json в папку пакета, чтобы сообщить Dynamo о необходимости загрузки пакета.

  1. Новая папка пакетов, созданная целевым объектом AfterBuild.

  2. Существующая папка src с проектом.

  3. Папки dyf и extra, созданные из целевого объекта AfterBuild.

  4. Скопируйте файл pkg.json вручную.

Теперь можно опубликовать пакет с помощью диспетчера пакетов Dynamo или скопировать его непосредственно в папку пакетов Dynamo: <user>\AppData\Roaming\Dynamo\1.3\packages.

Last updated