Packman / 包管理器
目前可在 vvvv gamma 8.0 预览版 中试用。
包管理器管两件事:
- 管理引用:引用的包、文件(.vl、.dll、.csproj)和 .NET Framework 程序集
- 浏览 VL 包和 NuGet 包:包就是一组 .vl 和 .dll 文件,点一下就能装上并引用,然后就能用它提供的所有节点
Managing References / 管理引用
这里能看到所有引用的包、文件和 .NET Framework 程序集。
点 Packs 区里的 “Browse” 按钮,切到包浏览器:

点 Files 区里的 “Add...” 按钮,可以添加对这几类文件的引用:
- .vl 文档
- .csproj 文件
- .dll 文件

.NET Framework Assemblies / .NET Framework 程序集
.NET Framework Assemblies / .NET Framework 程序集
如果要引用某个 .NET Framework 里的程序集,请始终直接引用它,不要用同名的 .NET NuGet 来引用。
Node Factories / 节点工厂
如果某个引用的包或文件带有 Node Factory(节点工厂),它还会出现在 “Node Factories” 区里。每个节点工厂都可以选:
- Add/Remove:在当前文档里显示或隐藏这个节点工厂的节点
- Forward:在引用了当前文档的其他文档里显示或隐藏这个节点工厂的节点
Browsing packs / 浏览包

Basic Usage / 基本用法
日常使用需要知道的其实不多:
- 按
Ctrl+F3打开 Packman - 切到 “Browse Packs” 标签页
- 找到你想用的包
- 点蓝色的 “Add” 按钮,下载并把它引用到当前文档
- 完成
之后你保存这个 vl 文档、在另一台电脑上打开时,vvvv 会自动把所有被引用的包下载下来。
包下载到哪里去了?好消息是:你不用管(在系统的某个 NuGet 缓存里)。早期版本里需要你自己维护的 \nugets 文件夹,在 vvvv gamma 8.x 之后已经不起任何作用了。
入门知道这些基本就够了。
Updates / 更新
接下来你可能遇到的情况是:你引用的某个包发布了新版本。Packman 会这样提示你:

想更新的话,从下拉框里选新版本即可:

vvvv 会下载并引用这个新版本,同时要求你重启:

之所以必须重启,是因为 vvvv 无法在运行时替换一个包的版本 —— 只有重启才能确保新选的版本被加载。你可以放心点那个 “Restart vvvv” 按钮,vvvv 会以你原先的状态重新打开,只不过加载的是新的引用。
Version mismatches / 版本不匹配
如果你选定的版本和当前实际加载的版本不一致,被引用的包上就会出现版本不匹配的警告。

几种情形会导致它:
- 如果你刚改过某个包的版本就看到这个警告,那需要重启才能确保新版本被加载(见上文)
- 如果你的多个文档各自明确引用了同一个包的不同版本,你得理一理,为整个项目定下一个版本(见下面的「不指定具体版本」)
- 如果警告出现在带 “Built-In” 标签的包上,你需要先理解这类包的角色,继续往下看
Built-in packs / 内置包
vvvv 自带一批它自己运行所必需的包,可以在 Built-in 区看到:

这些包的具体版本由 vvvv 的版本决定,无法更改。
如果你和其中某个包版本不匹配,那你没得选。这种情况下唯一的办法是选「不指定具体版本」,继续看:
Reference no specific version / 不指定具体版本
为了减少与内置包之间的版本不匹配警告、也为了在多个文档之间管理包版本,有一个特别的功能:引用某个包时,你可以选择「不使用具体版本」。这意味着你把「究竟加载哪个版本」这个决定交出去了。

对于带 “Built-In” 标签的包,这个选项本来就是默认的 —— 因为它们的版本早已替你决定好了。
另一个用得上的场景是大项目:多个 VL 文档引用同一个包。这个功能是「集中管理多文档包版本」的一半,另一半还在开发中。
Custom NuGet sources / 自定义 NuGet 源
nuget.org 只是默认的 NuGet 源。做内部开发时,你可能想要一个自己的 NuGet 源,除了公开的包,还能提供私有的包。
指定自定义 NuGet 源有两种办法:
用 nuget.config
在主 .vl 文档旁边放一个 nuget.config 文件。
打开 .vl 文档时,vvvv 会在同一个文件夹或它的上级文件夹里找 nuget.config。
比如要访问托管在 GitHub 上的私有源,可以这样写:
<configuration>
<packageSources>
<add key="MyPrivateNuGetFeed" value="https://nuget.pkg.github.com/GITHUB_USERNAME/index.json" />
</packageSources>
<packageSourceCredentials>
<MyPrivateNuGetFeed>
<add key="Username" value="<GITHUB_USERNAME>" />
<add key="ClearTextPassword" value="<TOKEN>" />
</MyPrivateNuGetFeed>
</packageSourceCredentials>
</configuration>
不想用 “ClearTextPassword” 的话,其他写法见 packageSourceCredentials 的文档!
Via commandline argument / 用命令行参数
也可以写成命令行参数:
vvvv.exe --package-repositories http://mynugetsource.com
但要注意:这种办法只适用于不需要登录凭据的源!
Vulnerable packs / 有漏洞的包
nuget.org(vvvv 默认的包仓库)维护着一份已知漏洞清单。
安装包时 vvvv 会对照这份清单,如果你选的版本有漏洞,它会告诉你。加包的时候留意一下日志,注意这类警告:

Preferred version of a pack / 包的首选版本
你可能会问:从节点浏览器直接添加引用、不指定版本时,拿到的到底是哪个版本?答案是 vvvv 对每个包都有一个「首选版本」的判断,计算方式是:
- 先假定是这个包的最新稳定版
- 查阅 package-constraints 文件,看这个包对当前运行的 vvvv 版本有没有已知限制
- 最终取「未被 package-constraints 限制的、最新的稳定版」
这个信息在每个包的版本下拉框里也是可见的。如果 vvvv 知道某个版本与当前运行的实例不兼容,你会看到「禁止」图标 —— 意思是那些版本在当前 vvvv 版本下用不了。

要记得:package-constraints 文件是由和你一样的人手工维护的,所以它的准确程度,取决于社区维护得怎么样。
Favorites / 收藏
可用的包数量庞大,但你多半会发现自己常用的就那么几个。为了让它们更好找,我们加了收藏功能。你可以在 Packman 或帮助面板里给包加星:

然后在单独的列表里快速找到它们:

一点提醒:如果你以前在帮助面板里用过收藏,那些不会自动迁移到新系统。
Support developers / 支持开发者
请特别留意这个列表:

包不是凭空冒出来的,是和你一样的 patcher 做出来、维护着的。某个包帮到了你,就去支持它的作者。