3

使用packages.config文件指定 NuGet 依赖项时,我可以提供allowedVersions属性来指定SemVer字符串,该字符串定义我希望能够更新到的版本范围。通过使用[],我目前能够有效地将我的包固定到单个版本。例如:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Common.Logging" version="3.3.0" allowedVersions="[3.3.0, 3.3.0]" />      
</packages>

现在,在 .net 核心项目中,我们必须project.json指定 NuGet 依赖项(尽管它可能是短暂的),我如何将 NuGet 依赖项固定到一个dotnet restore不会将我的应用程序更新为新版本的版本,可从我的包源?

{
  "version": "1.0.0-*",
  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Newtonsoft.Json": "9.0.1" //how can i pin to 9.0.1 ??
  },
}

此nuget 文档中的图 #2仅暗示这是可能的,但未提供执行此操作的语法。

- 更新 -

我使用两个 .net 核心类库和我的本地文件系统作为包存储库对此进行了测试。我创建了一个名为的类库UpdateMeDependencyLib并将其打包为 v1.0.0,并通过 nuget 从第二个项目中使用它。下面是来自第二个类库的 project.json 消耗UpdateMeDependencyLib

{
  "version": "1.0.0-*",

  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "UpdateMeDependencyLib": "1.0.0"
  },

  "frameworks": {
    "netstandard1.6": {
      "imports": "dnxcore50"
    }
  }
}

然后我更新UpdateMeDependencyLib到版本 1.1.0 并重新打包,所以现在我的本地系统上有一个 v1.0.0 和一个 v1.1.0 nuget 包。创建v1.1.0后UpdateMeDependencyLib我现在得到如下体验

  • 在 Visual Studio 中编译项目(不更改使用者 project.json),将UpdateMeDependencyLib输出 v1.1.0 消耗到其 bin 目录
    • 如果我强制在消费者库上恢复包,我现在会收到 Nuget 警告“指定的 NU1007 依赖项是 UpdateMeDependencyLib >= 1.0.0 但最终是 UpdateMeDependencyLib 1.1.0”

NU1007 警告

所以它看起来只是在我的消费库中使用“1.0.0”并没有固定它,当我的 NuGet 源中出现新版本时它会自动更新。

4

2 回答 2

1

您需要为您的 ref 使用以下符号

"UpdateMeDependencyLib": {
   "version": "1.0.0",
   "target": "package"
}

由于这两个项目在同一个解决方案中,因此系统不会使用您的本地包 repo 来解决依赖关系。它直接使用项目作为参考。因为解决方案中不再存在引用 1.0.0(并且因为"UpdateMeDeepencyLib": "1.0.0"意味着 >= 1.0.0),所以它使用 Nuget 规则“最低适用版本”并通过引用 1.1.0 项目来解决依赖关系。请注意,UpdateMeDependencyLib 在依赖关系树中的图标不是 nuget 的。

我想不通的是,我们如何严格地将依赖项设置为 1.0.0,并且在这种情况下,中断构建。

于 2016-10-31T16:14:46.927 回答
1

要锁定特定版本,请将版本号放在方括号内。

"UpdateMeDependencyLib": {
    "version": "[1.0.0]",
    "target": "package"
}

更新后您将需要执行还原包。

于 2017-02-20T03:58:24.413 回答