为NuGet分发配置类库

时间:2011-09-13 17:43:29

标签: nuget nuget-package

我正在调查如何使用NuGet在我的组织内分发开发人员框架和工具。我有服务器设置,能够生成包并将它们添加到消费项目中。我现在正在寻求将其扩展到更真实的情况。

在我的情况下,我将有一个框架,我们分发给组织中的所有开发团队。这个框架有一个“核心”类库,然后是一组技术特定的库,如Acme.Web,Acme.Silverlight等。这些库中的每一个都引用了“核心”程序集。

我已经将每个这些程序集打包到它自己的NuGet包中,包括“core”,它被设置为其他包中的依赖项。这是因为开发人员在创建类库时可能只选择引用“核心”,但在创建Web应用程序时也需要这些类型。

另一个想法是我可以发布我的“核心”程序集的新版本,而不需要在所有其他程序包中进行更新。或者我可以吗?

想象一下我有项目A的情况,添加NuGet包B,它依赖于NuGet包C,然后更新包C.是否可以在不重建,重新包装和重新发布包B的情况下分发此更新?如果是这样,我是否需要采取任何措施来确保没有版本问题?

1 个答案:

答案 0 :(得分:7)

听起来你问的问题是,给定以下依赖图:

- >意思取决于

B 1.0 -> C 1.0

如果碰巧有对C的更新,比方说C 1.1,您想知道是否可以将该更新发布到C并让消费者在不破坏B的情况下更新它。

我假设你在这里打包装配。如果是这样,那么你绝对可以做到。 NuGet做了一些事情来帮助使这个工作用于具有强名称的程序集(即它添加了必要的绑定重定向)。您只需要确保使用正确的版本控制(我强烈建议您阅读David Ebbo关于此主题的posts)。

让您基本了解这将如何运作。假设你是一个3人团队,你,开发人员1和2。

  1. 您将软件包B 1.0和C 1.0发布到公司的供稿
  2. 开发人员1安装B 1.0并获得C 1.0
  3. 你对C做了一个小错误修复,并称之为C 1.0.1(因为它没有破坏)。您不更新B(这意味着它表示它依赖于C 1.0而不是C 1.0.1)。
  4. 开发人员1将C更新为1.0.1并继续工作
  5. 开发人员2安装B 1.0并获得 C 1.0.1 (NuGet的依赖性解析行为)。
  6. 在上面的场景中,您将版本从C 1.0更改为C 1.0.1,并且不必重新发布B.

    现在,如果你做了一个巨大的改变并将版本提升到C 2.0,那么也许你想考虑重新打包B并增加版本号并使该版本的B依赖于C 2.0:

    B 2.0 -> C 2.0