gpt4 book ai didi

visual-studio - 在构建期间无法自动将 NuGet 包更新到最新版本

转载 作者:IT老高 更新时间:2023-10-28 11:15:32 25 4
gpt4 key购买 nike

我们有两个独立的 .NET 解决方案:

  • 为第一个解决方案运行构建会生成我们的最终产品:一堆 DLL。这些 DLL 通过 NuGet 包交付给我们的客户。
  • 第二个解决方案用作产品测试解决方案:将 NuGet 包安装到其中,并构建和执行它 - 因此它使用我们的产品的方式与我们的客户使用的方式完全相同。

这里的挑战是我们最新的 NuGet 包应该有一种方法自动安装到产品测试解决方案中,最好是在构建这个产品测试解决方案期间。

基于 a similar question 的想法,我在配置产品测试解决方案方面做到了这一点:

  • 首先我启用了 NuGet 包还原。这让我完全摆脱了 VCS 中的“packages”目录,因为具有 packages.config 文件中定义的版本的包将在构建之前由 NuGet 自动下载。
  • 然后我在 Visual Studio 中添加了以下预构建事件:$(SolutionDir).nuget\nuget update -prerelease $(ProjectDir)packages.config。这让我可以在构建过程中引入最新版本的 NuGet 包。

我目前使用上述方案来运行使用 Visual Studio 的本地构建和使用 TeamCity 的无人值守构建。该解决方案乍一看似乎适用于这两种情况,但实际上它不会产生预期的结果:构建产品测试解决方案时,在 bin 目录中我没有最新版本的 DLL,只有 latest-1 版本。

问题在于,尽管 nuget update 命令会按预期更新所有内容,包括 packages.config.csproj 文件,但它们的new content 不会被构建拾取,因此 - 正如我的猜测 - .csproj 文件中的 HintPath 设置仍然反射(reflect)“before build”状态,因此旧的 DLL 被复制到 bin 目录。我假设 .csproj 文件只处理一次:在触发预构建事件之前,并且预构建事件所做的更改在下一次构建之前被忽略。

我考虑了以下解决方案:

  • 显然预构建还不够“预”。如果有更早一点我可以插入 nuget update 命令,我上面的解决方案可能会起作用。
  • 我读到我可以通过定义 ReferencePath 来覆盖 .csproj 文件中的 HintPath-s。但我怀疑我能否轻松找出正确的路径,或者我是否可以及早设置它,以便构建能够接受它。
  • 作为一种解决方法,我可以运行构建两次:在 TeamCity 中为产品测试解决方案复制构建步骤,我总是可以在 Visual Studio 中本地构建解决方案两次。

有人知道如何在构建过程中自动将 NuGet 包更新到最新版本吗?

最佳答案

看看我刚刚写的关于这个过程的博客文章。我没有在服务器上配置东西,而是通过增加 Nuget.Targets 文件来完成它,该文件使用 Nuget 包还原选项放置到位。这种方法的美妙之处在于它在本地和服务器上执行(因此您可以在破坏构建之前看到任何可能的副作用)

在此处发布详细信息:http://netitude.bc3tech.net/2014/11/28/auto-update-your-nuget-packages-at-build-time/

关于visual-studio - 在构建期间无法自动将 NuGet 包更新到最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com