【问题标题】:Updating nuget package with and without prerelease flag in a C# project在 C# 项目中更新带有和不带有预发布标志的 nuget 包
【发布时间】:2015-04-24 07:17:14
【问题描述】:

我们使用 git 作为源代码控制,并遵循 git flow 工作流程。

我们正在使用 Visual Studio 2013

我们使用的是 Teamcity v8.1

我们有 2 个 C# 解决方案。解决方案 A 和解决方案 B。解决方案 B 使用解决方案 A 创建的 nuget 包。

我们使用 teamcity 作为构建服务器。我们有 2 个构建配置来创建项目 A nuget 包。一种构建配置创建 nuget 包的预发布版本,另一种构建配置创建 nuget 包的稳定版本。

用于创建预发布 nuget 的构建配置在开发分支上进行侦听。稳定版的构建配置监听 master/release/hotfix 分支

当我们在开发分支中工作时,我们使用 nuget 包的预发布版本。 但是当我们创建一个发布分支时,我们希望使用 nuget 包的稳定版本。

到目前为止,我们尝试过的是: 在项目 B 的 csproj 文件中,我们在 BeforeBuild 目标中添加了一个元素,该元素执行 nuget.exe 以更新 nuget 包的预发布版本。这很好用,因为每次我们构建项目 B 时,我们都会获得 nuget 包的最新预发布版本。

但是当我们在 release/master/hotfix 分支时,我们不想要预发布版本,我们想要稳定版本。

我创建了一个 powershell 脚本,该脚本从 BeforeBuild 目标中的项目 B csproj 文件执行

在 powershell 脚本中我可以找到我们所在的 git 分支,但我还没有找到使用 nuget.exe 将 nuget 包更新到最新稳定版本的方法。如果我可以在 powershell 脚本中使用 nuget cmdlet,我可以运行带有版本标志的更新包,但是在使用 nuget.exe 时不支持这一点

你有没有做过类似的事情,你是怎么解决的?

【问题讨论】:

  • 听起来很复杂。你为什么不使用 nuget 服务器呢?构建 nuget 包作为 CI 的一部分不是我会采用的方式。
  • 我们使用teamcity内部的nuget服务器来分发包。因此,解决方案 B 从该提要中获取 nuget 包。复杂的部分是根据您当前工作的 git 分支在包的稳定版本和预发布版本之间进行切换
  • 你可以有两个 nuget 提要,一个用于稳定分支,另一个用于开发分支,并根据分支名称在这些 nuget 提要之间切换。
  • 我现在选择的是编写一个 powershell 脚本,用最新的稳定版本值替换 .csproj 和 package.config 文件中的包版本值,以便 Visual Studio vil 恢复正确的包重建解决方案时
  • @OKB 我们没有完全相同的场景,但是任何 nuget 包的自动更新都是混乱的。我们的构建有一个复杂的 powershell 脚本来确定您要更新到哪个版本(查询源并查看最新版本与某种模式匹配,因为我们可能想要最新的 2.7.* 但 3.0 可用)然后它会做一些事情类似于在 proj 文件中查找和替换,因此它可以进行 nuget 恢复。

标签: c# powershell msbuild teamcity nuget-package


【解决方案1】:

我还尝试使用 Powershell 自动更新和安装软件包。据我所知,没有办法在 Visual Studio 之外使用 Visual Studio cmdlet。

你可以自己做所有事情。更新 packages.config,运行nuget update,更新 csproj 文件。

您的包可能有一个install.ps1 文件。这也使用 Visual Studio cmdlet。例如,install.ps1 可以将配置文件添加到 Visual Studio 项目并将Copy to Output Directory 设置为Copy if newer。 这意味着您还必须将这些更改添加到 csproj。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多