小编rem*_*ark的帖子

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

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

  • 运行第一个解决方案的构建产生我们的最终产品:一堆DLL.这些DLL通过NuGet包提供给我们的客户.
  • 第二个解决方案用作产品测试解决方案:NuGet包安装在其上,并且构建和执行 - 因此它使用我们的产品与客户的方式完全相同.

这里面临的挑战是,应该有一种方式将我们最新的NuGet软件包自动安装到产品测试解决方案中,最好是在构建此产品测试解决方案期间.

基于类似问题的想法,我在配置产品测试解决方案方面做到了这一点:

  • 首先我启用了NuGet Package Restore.这使我可以完全从VCS中删除"packages"目录,因为在build.config文件中定义的版本的包将在构建之前由NuGet自动下载.
  • 然后我在Visual Studio中添加了以下预构建事件:$(SolutionDir).nuget\nuget update -prerelease $(ProjectDir)packages.config.这让我可以在构建期间引入最新版本的NuGet包.

我目前使用上面的场景使用Visual Studio运行本地构建,使用TeamCity运行无人参与的构建.该解决方案似乎第一眼就适用于这两种情况,但实际上它并没有产生预期的结果:当构建产品测试解决方案时,在bin目录中我没有获得最新版本的DLL,只有最新版本-1版本.

问题是虽然nuget update命令按预期更新了所有内容,包括文件packages.config.csproj文件,但它们的新内容不会被构建选中,因此 - 正如我的猜测 - 文件中的HintPath设置.csproj仍然反映了"构建前"状态因此旧的DLL被复制到bin目录中.我假设.csproj文件只处理一次:在触发预构建事件之前,预构建事件所做的更改将被忽略,直到下一次构建.

我考虑了以下解决方案:

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

有人想出如何在构建期间自动将NuGet包更新到最新版本?

teamcity build visual-studio nuget

15
推荐指数
2
解决办法
1万
查看次数

标签 统计

build ×1

nuget ×1

teamcity ×1

visual-studio ×1