Creating a new Library/Package/Nuget / 创建一个新的节点库/包/NuGet
给 vvvv 贡献一组节点,最一致的方式是做一个节点库,并以 NuGet 包的形式发布。
源码 NuGet 与二进制 NuGet
NuGet 包通常以二进制形式安装。vvvv 在此之上加了「源码 NuGet」这个想法:它允许你直接引用一个包的源码,就好像那已经是一个二进制 NuGet 一样。要让 vvvv 把一个目录认作源码 NuGet,这个目录必须位于某个包仓库路径下,并遵守下面这些约定:
一个 NuGet 的内部构造
对 vvvv 来说,一个目录里的源码 NuGet 由两个文件定义:
<包名>\<包名>.nuspec<包名>\<包名>.vl
比如:
\VL.Devices.Leap\VL.Devices.Leap.nuspec
\VL.Devices.Leap\VL.Devices.Leap.vl
.nuspec 文件用一种简单的文本格式描述一个 NuGet,格式定义见 Nuspec 参考(英文)。
.vl 文件是使用这个 NuGet 时的中心入口。它定义了「用了这个 NuGet 之后你能得到哪些节点」:所有东西要么打在这个文件里,要么被标记为「转发依赖」。
备注
确保这个包里没有任何一个 .vl 文件引用了 .csproj 文件!那会强制整个包、以及所有依赖它的包变成可编辑的,于是你就失去了只读包带来的好处。
要让 NuGet 在 vvvv 里正常工作,你得提供下面这样的结构 —— 当然所有目录都是可选的,只有某个 NuGet 真的用到时才需要:
\lib // 放托管的 .dll
\runtimes // 放原生/非托管的 .dll *
\src // 放 C# 源码
<包名>.nuspec
<包名>.vl
* 见按架构区分的目录(英文)
创建并发布一个 NuGet
当你准备好把节点库打成一个 .nupkg 时,有几种做法可选: