Cargo.lock
Cargo.toml
不用于库,而是使用Cargo.lock
中的依赖版本范围,以减少共享依赖项之间的lib重复。
但是,我认为有些情况下使用已知的成功构建lib依赖项是更可取的。即,当依赖项不再由于其自己的依赖项的更新而构建时。
是否有可能将Cargo配置为支持图书馆的Cargo.toml
,而不是mongodb = "0.10.*"
,如果它可用的话?最好是按包装。
(更新:以下问题已在0.5.1中修复,其中依赖项现在为Cargo.toml
。但是,如果mongodb更新,似乎会重新出现此问题它的bson依赖 - 至少在枯萎的依赖关系再次更新以匹配。或者,正如@Shepmaster在他的回答中提到的那样,直到Cargo FAQ states被实现。)
我的特殊情况是尝试使用包RFC 1977:
mongodb = "<1.0"
指定依赖项bson = "<1.0"
和Cargo.toml
bson = "0.10.0"
指定0.11.1
bson 0.10.0
如果不进一步配置依赖关系,bson 0.11.1
用于mongodb,Cargo.toml
用于枯萎。这导致wither的编译失败,因为它使用bson中的一些结构与mongodb交互。
我当前的解决方法是本地克隆的枯萎副本,并使用已编辑的Cargo.lock
来修复其bson版本。但是,wither 0.5.0包含一个已提交的{{1}},这样我至少可以使用此存储库作为我的依赖目标,而不是自己克隆和修改包。
答案 0 :(得分:2)
不,你不能使用图书馆的Cargo.lock。
因为它使用bson中的一些结构与mongodb交互。
这是根本问题。目前,依赖解析器不知道一个箱子在公共接口中暴露了另一个箱子的类型。这将在RFC 1977实施时解决。
如Consolidating cargo dependencies中所述,您可以轻推要合并的依赖项版本:
cargo update -p bson:0.11.1 --precise 0.10.0
另见:
话虽如此,因为的semver,你的代码运行得很好:
[dependencies]
wither = "0.5.1"
mongodb = "0.3.7"
$ cargo tree --invert -p bson
bson v0.10.0
├── mongodb v0.3.7
│ ├── example v0.1.0 (file:///private/tmp/example)
│ └── wither v0.5.1
│ └── example v0.1.0 (file:///private/tmp/example) (*)
似乎不可避免地,bson 0.10.0用于mongodb,而bson 0.11.1用于枯萎。
情况并非如此,您可以通过(a)上面的示例和(b)您自己关于可接受版本范围的陈述来判断。