【问题标题】:Consuming actively developed NuGet package使用积极开发的 NuGet 包
【发布时间】:2014-02-11 17:20:53
【问题描述】:

首先,我将描述我们的设置(它是企业开发管道的一个极其简化的版本)。我们开发了一个.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 versionNuGet issues with packages.config, project references and the solutionwide packages folder,没有给出明确的答案。

【问题讨论】:

    标签: continuous-integration nuget nuget-package


    【解决方案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

    【讨论】:

    • 恕我直言,这是不可能的。此链接讨论 nuspec 语法 not 关于 packages.config 语法。所以在 packages.config 中不允许使用 allowedVersions 属性。
    • 绝对可以在packages.config 中指定allowedVersions:“NuGet 支持限制可以通过使用 allowedVersions 属性手动编辑 packages.config 文件升级到的版本范围。” docs.nuget.org/docs/reference/…我已经用了 2 年多了 :)
    • @MatthewSkelton 您能否举例说明您的 packages.config 和 .csproj 文件在使用这样的包时是什么样子的?我正在尝试实现一些非常相似的东西,我们使用 NuGet 包的夜间构建并且无法使其正常工作。
    【解决方案2】:

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

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

    您可以在每晚构建中自动执行此操作,并检查生成的更改。然而,这是否是一个好主意还有待商榷。至少,您应该通过运行构建来控制更新操作,以确保新版本不会导致构建中断。

    【讨论】:

    • 我们倾向于做这样的事情。但是,我们的包每天更新一次以上,因此每次提交都需要运行更新脚本。我希望有一个更简单的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多