正在积极开发NuGet包

时间:2014-02-07 20:53:44

标签: continuous-integration nuget nuget-package

首先,我将描述我们的设置(它是企业开发管道的极其简化的版本)。我们开发了一个.NET应用程序,它依赖于一些共享组件。共享组件通常与应用程序一起开发。我们希望将这些共享组件转换为NuGet包。

因此,我发布了包A的1.0.0.4版,并希望在我的应用程序中使用它。我的packages.config看起来像这样。

<package id="A" version="1.0.0.4"/>

到目前为止一切顺利。我可能会在此时将packages.config提交到版本控制以记住我的依赖项。现在我运行包A的下一个版本,它发布版本1.0.0.5。现在我希望我的应用程序自动在构建之前将软件包A更新到1.0.0.5。

但是,我的包配置现在包含一个精确版本1.0.0.4并且它是版本控制的。我的问题是:

  • 我可以以某种方式指定我想在包配置中使用1.0或更高版本吗?换句话说,我可以避免使用每个包的每个新版本更改packages.config吗?
  • 我可以在构建到最新版本之前以某种方式更新依赖项吗?我可以使用脚本自动执行吗?

我对NuGet很新,我来自ant + ivy / maven世界,这个功能是自动的,所以我仍然希望我在NuGet中遗漏一些明显的东西,尽管扫描stackoverflow上的讨论没有听起来太令人鼓舞了。

我找到了Using Nuget in development environment - best practices / how toHow to automatically update NuGet packages to latest available version以及NuGet issues with packages.config, project references and the solutionwide packages folder,但没有给出明确的答案。

2 个答案:

答案 0 :(得分:1)

您可以使用allowedVersions属性自动使用某个范围内的较新软件包版本,如下所示:

<packages>
    <package id="SomePackage" version="2.1.0" allowedVersions="[2,3)" />
</packages>

在此示例中,将使用2.x系列中的任何包,但不会使用3.x系列中的任何包。您可以更具体地了解禁令,例如: `allowedVersions =“[2.1,2.4)”如果您想从2.1,2.2和2.3中获取任何包,而不是2.4。

有关详细信息,请参阅http://docs.nuget.org/docs/reference/versioning

答案 1 :(得分:0)

我认为您无法更改packages.config以隐式允许更高版本。此外,项目文件引用了packages文件夹,其中包含路径中的软件包版本,因此需要在软件包更新后对其进行更改。

您可以通过运行packages.config来执行nuget update和项目文件的更新。

您可以在夜间构建中自动执行此操作,并检查生成的更改。然而,这是一个好主意是值得商榷的。至少,您应该通过运行构建来关闭更新操作,以确保新版本不会导致构建中断。