Nuget packages.config和特定版本

8
我正在尝试按照此指南http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package,从我的项目创建一个NuGet包。我已成功创建了nuspec和nupkg。我的项目包含对Json.NET的依赖项,我通过NuGet安装了它。但是,我想指定使用Json.NET的特定版本,即4.0.7版本。我在nuspec中添加了以下内容:
<dependencies>
  <dependency id="Newtonsoft.Json" version="[4.0.7]" />
</dependencies>

当我运行nuget pack命令时,它似乎能检测到我有一个packages.config文件。
Using 'MyProject.nuspec' for metadata.
Found packages.config. Using packages listed as dependencies.

这似乎完全忽略了我在nuspec中定义的依赖关系,因为安装Nuget软件包会将依赖项列为“>= 4.0.7”,这会拉取最新版本4.0.8。
我该如何停止这个行为,或者更好的方法是让Nuget从packages.config中拉取依赖项,但允许我覆盖特定的依赖项?
2个回答

19

我遇到了同样的问题。你需要像这样定义一个精确的版本。

<dependencies>
<dependency id="Newtonsoft.Json" version="[4.0.7,4.0.7]" />
</dependencies>

这将确保项目拉取依赖项时使用的版本为4.0.7而不是≥ 4.0.7。


2
尽管 [4.0.7, 4.0.7] 也可以正常运行,但是 [4.0.7] “应该” 工作。如果不行,那就是个 bug。我用这种方法可以正常工作,但具体你的操作方式我不清楚。请详细描述并报告一个 bug,以便我们修复它。谢谢! - half-ogre

3
您指定版本的方式是正确的;如我们的版本控制文档所示,[1.0] 表示 'version == 1.0'。您描述的行为应该是一个 bug,但我无法复现这个 bug。我所做的事情:
  • 创建了一个类库
  • 通过 NuGet 添加了 Json.NET (它安装了 4.0.8)
  • 执行了 nuget spec
  • 在 .nuspec 中添加了 <dependencies><dependency id="Newtonsoft.Json" version="[4.0.7]" />
  • 执行了 nuget pack
  • 在 Package Explorer 中打开了包;它显示依赖关系为 '= 4.0.7'
  • 在新项目中安装了我的包;它显示依赖关系为 '= 4.0.7' 并安装了 4.0.7

screen capture screen capture 2

也许您没有使用最新版本的nuget.exe或NuGet Visual Studio扩展程序?当您说它“列出依赖项”时,您在哪里看到它?当您的软件包安装后,在Package Explorer中还是其他地方?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接