在 paket.dependencies 文件中,运算符 `==` 的含义是什么?
In a paket.dependencies file, what is the meaning of the operator `==`?
在项目的 paket.dependencies 文件中,我发现了这些行:
nuget Microsoft.AspNet.Mvc == 5.2.6
nuget Microsoft.AspNet.Razor == 3.2.6
nuget Microsoft.AspNet.WebPages == 3.2.6
我检查了 official documentation 没有成功。
我的猜测是 ==
可以修复版本号,但要实现这一点,我们可以直接编写 nuget Microsoft.AspNet.Mvc 5.2.6
.
运算符==
是什么意思?
Paket 是一个开源项目。让我们挖掘源头。 paket.dependencies 文件解析在 GitHub 上可用。逻辑如下:
match splitVersion text with
| "==", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.OverrideAll v,parsePrerelease [v] rest)
| ">=", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.Minimum v,parsePrerelease [v] rest)
| ">", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.GreaterThan v,parsePrerelease [v] rest)
| "<", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.LessThan v,parsePrerelease [v] rest)
| "<=", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.Maximum v,parsePrerelease [v] rest)
| "~>", minimum :: rest ->
let v1 = SemVer.Parse minimum
VersionRequirement(VersionRange.Between(minimum,twiddle v1),parsePrerelease [v1] rest)
| _, version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.Specific v,parsePrerelease [v] rest)
| _ -> failwithf "could not parse version range \"%s\"" text
因此 ==
会将 VersionRange 设置为 OverrideAll
。这将对 IsGlobalOverride
.
产生影响
member x.IsGlobalOverride =
match x with
| OverrideAll _ -> true
| _ -> false
总结 ==
将覆盖给定版本的包,如果没有,将使用给定版本的当前包。这是一个粗略的理解,请在旁边进行任何彻底的回答。
它被称为 "Use exactly this version" 约束。它确实应该是 paket.dependencies 参考的一部分,但它位于:https://fsprojects.github.io/Paket/nuget-dependencies.html
我会试着用一个例子来解释它。假设您依赖包 A 和 B。
A 和 B 都依赖于 C,但在它们各自的 nuget 包依赖声明中指定:
A 依赖于 C 版本 >= 1.2.3 但 < 2.0
B 依赖 C 版本 >= 2.0
在这种情况下,paket 将无法找到适合 A 和 B 的通用 C 版本。
我在一些项目中看到过这样的情况,其中对像 A 这样的包有依赖性,声称它不能与包 C 的 >= 2.0 版本一起使用。但是在实际测试时,A 与C 的最高版本。因此可以添加一行强制 paket 覆盖 A 对 C 的版本约束:
nuget C == 2.0
当然,长期的解决方案是要求 A 的维护者更新他们的 nuget 依赖声明。
在项目的 paket.dependencies 文件中,我发现了这些行:
nuget Microsoft.AspNet.Mvc == 5.2.6
nuget Microsoft.AspNet.Razor == 3.2.6
nuget Microsoft.AspNet.WebPages == 3.2.6
我检查了 official documentation 没有成功。
我的猜测是 ==
可以修复版本号,但要实现这一点,我们可以直接编写 nuget Microsoft.AspNet.Mvc 5.2.6
.
运算符==
是什么意思?
Paket 是一个开源项目。让我们挖掘源头。 paket.dependencies 文件解析在 GitHub 上可用。逻辑如下:
match splitVersion text with
| "==", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.OverrideAll v,parsePrerelease [v] rest)
| ">=", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.Minimum v,parsePrerelease [v] rest)
| ">", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.GreaterThan v,parsePrerelease [v] rest)
| "<", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.LessThan v,parsePrerelease [v] rest)
| "<=", version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.Maximum v,parsePrerelease [v] rest)
| "~>", minimum :: rest ->
let v1 = SemVer.Parse minimum
VersionRequirement(VersionRange.Between(minimum,twiddle v1),parsePrerelease [v1] rest)
| _, version :: rest ->
let v = SemVer.Parse version
VersionRequirement(VersionRange.Specific v,parsePrerelease [v] rest)
| _ -> failwithf "could not parse version range \"%s\"" text
因此 ==
会将 VersionRange 设置为 OverrideAll
。这将对 IsGlobalOverride
.
member x.IsGlobalOverride =
match x with
| OverrideAll _ -> true
| _ -> false
总结 ==
将覆盖给定版本的包,如果没有,将使用给定版本的当前包。这是一个粗略的理解,请在旁边进行任何彻底的回答。
它被称为 "Use exactly this version" 约束。它确实应该是 paket.dependencies 参考的一部分,但它位于:https://fsprojects.github.io/Paket/nuget-dependencies.html
我会试着用一个例子来解释它。假设您依赖包 A 和 B。
A 和 B 都依赖于 C,但在它们各自的 nuget 包依赖声明中指定:
A 依赖于 C 版本 >= 1.2.3 但 < 2.0
B 依赖 C 版本 >= 2.0
在这种情况下,paket 将无法找到适合 A 和 B 的通用 C 版本。
我在一些项目中看到过这样的情况,其中对像 A 这样的包有依赖性,声称它不能与包 C 的 >= 2.0 版本一起使用。但是在实际测试时,A 与C 的最高版本。因此可以添加一行强制 paket 覆盖 A 对 C 的版本约束:
nuget C == 2.0
当然,长期的解决方案是要求 A 的维护者更新他们的 nuget 依赖声明。