visual-studio - 如何使用来自构建服务器的项目引用来管理 Nuget 包依赖版本
问题描述
我有一个简单的项目依赖结构:
project A references project B
在我的构建服务器上,两个项目都构建为 Nuget 包:包 A 和包 B。
在项目 B 中,我将包版本手动设置为 2.0.0。当我在 Visual Studio 中测试构建项目 A 时,生成的 Nuget 包 A 依赖于版本 2.0.0 的包 B。这是期望的行为。
然而,在构建服务器上,我们需要自动递增版本号,以便用于构建项目 A 的 MSBuild 命令具有构建服务器/p:Version={version}
确定{version}
的任何版本号。
在 MSBuild 中使用/p:Version={version}
开关会导致 Nuget 包 A 依赖于完全相同的包 B,{version}
而不是 2.0.0。这是非常有问题的,因为我们需要控制 Nuget 包对特定版本的包 B 的依赖。
所以这里是我试图解决这个问题的所有事情,但它们都有其明显的缺点:
不是让项目 A 引用项目 B,而是引用项目 B 的 NuGet 包 - 包 B。
在这种情况下,您会丢失项目引用,当您需要同时调试项目 A 和 B 时,这可能会很痛苦。
将项目 B 的程序集捆绑到包 A 中。
所以包 A 对包 B 没有依赖关系。但是,因为项目 B 也被项目 C、D 和 E 引用。如果我对它们都这样做,所有包都将具有相同的项目 B 程序集。
当所有包都被另一个项目引用时,它们会从项目 B 中覆盖彼此的程序集,因此其中一些可能会有旧版本的程序集覆盖新版本,从而导致无法预料的运行时问题。
让构建服务器更新
Version
项目 A 的项目文件中的元素:<PropertyGroup> <Version>1.2.3</Version> </PropertyGroup>
/p:Version={version}
然后在没有开关的情况下运行 MSBuild 命令。但是,如果构建服务器更新并提交了我们源代码管理中的实际项目文件,这将触发构建服务器再次构建该项目,并进入无限循环。
这就是我现在所处的位置,如果可能的话,试图找到一个好的解决方案来满足以下标准:
- 构建服务器确定项目 A 和 B 的版本,并分别生成相应的 Nuget 包及其版本。
- 包 A 应该依赖于包 B 的正确版本,包 B 也是由构建服务器构建的。
- 项目 A 应将项目 B 作为常规项目参考。
有谁知道这是否可能?
解决方案
推荐阅读
- javascript - 使用 Javascript 切换显示内容
- excel - OLEObjects OptionButtons 事件处理
- sql - ORA-00904: "Q"."ITEM_NO": 无效标识符 - Oracle SQL 组按问题
- graphql - 当我向 chaskiq graphql 端点发送突变请求时,我得到“找不到数据”
- ios - Watchkit 通过按钮从模态控制器返回页面控制器,保持页面控制器滑动手势
- flutter - 解析嵌套的 json 失败颤振
- c - 当您调用克隆系统调用时,谁设置了 RIP 寄存器?
- node.js - 调用某些 API 时出现 Sails 错误:最初在 15 秒前调用的函数仍未实际执行
- tensorflow - 为什么在前向传递中执行“梯度”节点?
- python - python中二维数组中间隔的最大值