1

在项目的 paket.dependencies 文件中,我发现了这些行:

nuget Microsoft.AspNet.Mvc == 5.2.6
nuget Microsoft.AspNet.Razor == 3.2.6
nuget Microsoft.AspNet.WebPages == 3.2.6

我检查了官方文档没有成功。我的猜测是==可以修复版本号,但要实现这一点,我们可以直接编写nuget Microsoft.AspNet.Mvc 5.2.6.

运算符的含义是什么==

4

2 回答 2

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

在这种情况下,paket 将无法找到适合 A 和 B 的通用 C 版本。

我曾在某些项目中看到过对像 A 这样的包存在依赖项的情况,该包声称它不适用于包 C 的 >= 2.0 版本。但是,在实际测试时,A 在最高版本的 C 下工作得很好。因此,可以添加一行来强制 paket 覆盖 A 对 C 的版本约束:

nuget C == 2.0

当然,长期的解决方案是要求 A 的维护者更新他们的 nuget 依赖声明。

于 2019-08-20T05:45:15.460 回答
0

Paket 是一个开源项目。让我们挖掘源头。GitHub 上提供了 paket.dependencies 文件解析。这是逻辑:

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

资源

总而言之==,将覆盖给定版本的包,如果没有,将使用给定版本的当前包。这是一个粗略的理解,请以及任何彻底的答案。

于 2019-06-20T14:39:41.663 回答