rem*_*ark 15 teamcity build visual-studio nuget
我们有两个独立的.NET解决方案:
这里面临的挑战是,应该有一种方式将我们最新的NuGet软件包自动安装到产品测试解决方案中,最好是在构建此产品测试解决方案期间.
基于类似问题的想法,我在配置产品测试解决方案方面做到了这一点:
$(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命令,我的上述解决方案可能会工作.有人想出如何在构建期间自动将NuGet包更新到最新版本?
看一下我刚才关于这个过程的博客文章.我没有在服务器上配置东西,而是通过扩充使用Nuget Package Restore选项实现的Nuget.Targets文件来实现.这种方法的优点是它在本地和服务器上执行(所以你可以在打破构建之前看到任何可能的副作用)
发布详情:http://netitude.bc3tech.net/2014/11/28/auto-update-your-nuget-packages-at-build-time/
我认为将自动更新放在预构建步骤中不是 NuGet 风格。你可以理解每次做的时候都需要这个操作。主要是因为它可以增加构建时间。例如,当您使用 TDD 并经常重建项目并运行测试时,您希望它能够快速完成。此外,它可能会更新意外的软件包并破坏某些内容,之后您可能会花费大量时间来查找问题。
我建议将更新作为单独的步骤进行。在 TeamCity 上,您可以使用NuGet installer构建步骤。要执行更新,只需选中步骤配置底部区域中的两个复选框:

此外,如果您希望在成功构建并通过测试后保留更新结果,您可以添加稍后的构建步骤,将这些更改提交到 VCS(例如使用 cmd 或 PowerShell)。
当您在本地工作时,我认为最好的方法是在开始使用项目之前运行一次更新包。您可以使用Package Manager Console命令来实现此目的Update-Package -IncludePrerelease。
| 归档时间: |
|
| 查看次数: |
10676 次 |
| 最近记录: |