在项目的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
。
运算符==
的含义是什么?
答案 0 :(得分:0)
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
要得出结论,==
将覆盖给定版本的软件包,否则,将使用给定版本的当前软件包。请进行粗略的理解,并在旁边提供任何详尽的答案。
答案 1 :(得分:0)
这称为“使用完全使用此版本”约束。它确实应该是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
在这种情况下,购物袋将找不到适合A和B的通用C版本。
在某些项目中,我曾看到某些项目依赖于像A之类的软件包,该软件包声称它不适用于C版本> = 2.0的软件包。但是,在实际测试中,A可以在最高版本下正常工作因此,可以添加一行以强制paket覆盖A对C的版本约束:
nuget C == 2.0
当然,长期的解决方案是要求A的维护者更新其nuget依赖项声明。