为NuGet分发配置类库

Son*_*ate 2 nuget nuget-package

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

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

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

另一个想法是我可以发布我的"核心"程序集的新版本,而不需要更新所有其他程序包.或者我可以吗?

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

dav*_*owl 7

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

- >意思取决于

B 1.0 -> C 1.0
Run Code Online (Sandbox Code Playgroud)

如果恰好有C的更新,比方说C 1.1,你想知道你是否可以将该更新发布到C并让消费者更新它而不会破坏B.

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

让您基本了解这将如何工作.假设你是一个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的依赖解析行为).

在上面的场景中,您将版本从C 1.0更改为C 1.0.1,并且不必重新发布B.

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

B 2.0 -> C 2.0
Run Code Online (Sandbox Code Playgroud)