软件包是一种用于存储节点并与 Dynamo 社区共享节点的便捷方式。软件包可以包含从在 Dynamo 工作空间中创建的自定义节点到 NodeModel 派生节点等的所有内容。发布和安装软件包使用的是软件包管理器。除了此页面,Primer 还提供了有关软件包的常规手册。
Dynamo Package Manager 是一个软件注册表(类似于 npm),可以从 Dynamo 或 Web 浏览器中访问。软件包管理器包括安装、发布、更新和查看软件包。与 npm 一样,它会维护不同版本的软件包。它还有助于管理项目的依赖关系。
在浏览器中,搜索软件包并查看统计信息:https://dynamopackages.com/
在 Dynamo 中,软件包管理器包括安装、发布和更新软件包。
联机搜索软件包:
Packages > Search for a Package...
查看/编辑已安装的软件包:
Packages > Manage Packages...
发布新软件包:
Packages > Publish New Package...
软件包是从 Dynamo 内的软件包管理器发布的。建议的过程是本地发布、测试软件包,然后联机发布以与社区共享。通过使用 NodeModel 案例研究,我们将完成本地发布 RectangularGrid 节点为软件包和联机发布的必要步骤。
启动 Dynamo,然后选择 Packages > Publish New Package...
以打开 Publish a Package
窗口。
选择
Add file...
以浏览要添加到软件包的文件从 NodeModel 案例研究中选择两个
.dll
文件选择
Ok
在将文件添加到软件包内容中后,为软件包指定名称、描述和版本。使用 Dynamo 发布软件包会自动创建 pkg.json
文件。
准备好发布的软件包。
提供所需的名称、描述和版本信息。
通过单击“本地发布”进行发布,然后选择 Dynamo 的软件包文件夹“
AppData\Roaming\Dynamo\Dynamo Core\1.3\packages
”以使节点在核心中可用。始终本地发布,直到软件包准备好共享。
发布软件包后,节点将在 Dynamo 库中的 CustomNodeModel
类别下可用。
我们刚刚在 Dynamo 库中创建的软件包
在软件包准备好联机发布后,打开软件包管理器、选择 Publish
,然后选择 Publish Online
。
要查看 Dynamo 如何设置软件包的格式,请单击“CustomNodeModel”右侧的三个垂直点,然后选择“显示根目录”
在“发布 Dynamo 软件包”窗口中,选择
Publish
,然后选择Publish Online
。要删除软件包,请选择
Delete
。
更新软件包的过程与发布过程类似。打开软件包管理器、在需要更新的软件包上选择 Publish Version...
,然后输入更高版本。
选择
Publish Version
以使用根目录中的新文件更新现有软件包,然后选择它应本地发布还是联机发布。
软件包管理器 Web 客户端专用于搜索和查看软件包数据,例如版本控制和下载统计信息。
可以通过以下链接访问软件包管理器 Web 客户端:https://dynamopackages.com/
如果要开发要发布为 Dynamo 软件包的程序集,可以将项目配置为对所有必需资源进行分组,并将其放置在与软件包兼容的目录结构中。这将使项目能够作为软件包快速进行测试,并模拟用户体验。
在 Visual Studio 中构建软件包有两种方法:
通过“项目设置”对话框,添加使用 xcopy 或 Python 脚本复制必需文件的构建后事件
在 .csproj
文件中,使用“AfterBuild”构建目标来创建文件和目录复制任务
由于“AfterBuild”不依赖于可能在构建计算机上不可用的文件复制操作,因此“AfterBuild”是这些类型操作(以及本手册中介绍的操作)的首选方法。
在储存库中设置目录结构,以使源文件与软件包文件分开。使用 CustomNodeModel 案例研究时,将 Visual Studio 项目和所有关联文件放置到新的 src
文件夹中。您会将项目生成的所有软件包都存储在此文件夹中。文件夹结构现在应如下所示:
将项目文件移动到新的
src
文件夹
由于源文件位于单独的文件夹中,因此在 Visual Studio 中将 AfterBuild
目标添加到 CustomNodeModel.csproj
文件。这应该会将必需文件复制到新的软件包文件夹中。在文本编辑器(我们使用的是 Atom)中,打开 CustomNodeModel.csproj
文件,然后在结束标记 </Project>
之前放置构建目标。此 AfterBuild 目标会将所有 .dll、.pbd、.xml 和 .config 文件复制到新的 bin 文件夹中,并创建 dyf 文件夹和 extra 文件夹。
我们需要确保目标已添加到
CustomNodeModel.csproj
文件(而非其他项目文件)中,并确保项目没有任何现有的“构建后”设置。
将 AfterBuild 目标放置在结束标记
</Project>
之前。
在 <ItemGroup>
部分中,定义了许多变量来表示特定的文件类型。例如,Dll
变量表示输出目录中扩展名为 .dll
的所有文件。
Copy
任务是将所有 .dll
文件复制到某个目录,尤其是我们要构建到的软件包文件夹。
Dynamo 软件包通常有 dyf
和 extra
文件夹,用于 Dynamo 自定义节点和其他资源(如图像)。要创建这些文件夹,我们需要使用 MakeDir
任务。如果某个文件夹不存在,则此任务会创建该文件夹。可以手动将文件添加到此文件夹。
如果您构建项目,则项目文件夹现在应该有 packages
文件夹以及之前创建的 src
文件夹。packages
目录内是一个文件夹,其中包含软件包所需的所有内容。我们还需要将 pkg.json
文件复制到软件包文件夹中,以使 Dynamo 知道要载入软件包。
AfterBuild 目标创建的新软件包文件夹
项目的现有 src 文件夹
从 AfterBuild 目标创建的
dyf
和extra
文件夹手动复制
pkg.json
文件。
现在,可以使用 Dynamo 的软件包管理器发布软件包,也可以直接将软件包复制到 Dynamo 的软件包目录:<user>\AppData\Roaming\Dynamo\1.3\packages
。
Dynamo 扩展可以像常规 Dynamo 节点库一样展开到软件包管理器。如果安装的软件包包含视图扩展,则会在 Dynamo 载入时的运行时载入扩展。可以查看 Dynamo 控制台,以确认扩展是否已正确载入。
扩展包的结构与普通软件包相同,其中包含...
假定您已构建扩展,您将(至少)有一个 .NET 程序集和一个清单文件。该程序集应包含实现 IViewExtension
或 IExtension
的类。清单 .XML 文件会告知 Dynamo 要实例化哪个类才能启动扩展。为了使软件包管理器能够正确定位扩展,清单文件应准确对应于程序集位置和命名。
将任何程序集文件放置在 bin
文件夹中,并将清单文件放置在 extra
文件夹中。任何其他资源也可以放置在此文件夹中。
清单 .XML 文件示例:
在您有包含上述子目录的文件夹后,即可将其推送(上传)到软件包管理器。需要注意的一点是,您当前无法从 Dynamo 沙箱发布软件包。这意味着您需要使用 Dynamo Revit。在进入 Dynamo Revit 后,导航到“软件包”=>“发布新软件包”。这将提示用户登录到其要与软件包关联的 Autodesk 帐户。
此时,您应该位于常规发布软件包窗口,在该窗口中将输入有关软件包/扩展的所有必填字段。还有一个非常重要的附加步骤,要求您确保没有任何程序集文件标记为节点库。为此,请在已输入的文件(在上面创建的软件包文件夹)上单击鼠标右键。一个上下文菜单即会显示,让您可以选中(或取消选中)此选项。应取消选中所有扩展程序集。
在公开发布之前,应始终在本地发布,以确保一切正常。在确认一切正常后,即可通过选择“发布”来联机发布。
要确认软件包是否已成功上传,您应该能够根据在发布步骤中指定的命名和关键字搜索到相应软件包。最后,请务必注意,相同的扩展需要重新启动 Dynamo,然后才能正常运行。通常,这些扩展需要在 Dynamo 启动时指定的参数。