在 CI 中通过 MSBuild.exe 发布 Web 应用程序时,NuGet 定位了错误的文件夹

NuGet targets wrong folder when publishing web application via MSBuild.exe in CI

我正在尝试在我们的 CI 服务器 (bamboo) 中设置一个项目。

我有一个 API 解决方案,其中包含多个项目(数据访问、服务接口、WebApi、测试、其他一些……你懂的)。我 运行 nuget.exe 在脚本中引入解决方案级别的必需包。这些包进入解决方案目录 .nuget.

当我使用 MSBuild 创建二进制文件时,一切正常。然后我在测试项目上使用 MSTest 运行ner;仍然一切都很好。然后我关闭了目标 Web 服务,然后 运行 msbuild.exe 对参数为 /p:DeployOnBuild=true /p:PublishProfile=INTENV.

的 WebApi 项目

这就是竹子对我吠叫的地方。我收到这样的失败错误消息:

error : This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ..\(My Solution Folder)\.nuget\NuGet.targets.

项目显然是在项目文件夹中寻找依赖项,在这种情况下并且仅在这种情况下。

如何告诉 MSBuild.exe 这个文件夹在上一级?这是它唯一感到困惑的地方。

所以当我以项目而不是 MSBuild.exe 的解决方案为目标时发生的事情是它认为 $(SolutionDir) 是项目目录。它正在寻找位于 $(SolutionDir).nuget\NuGet.targets 的 nuget 目标,如果从项目级别开始,这是一个不正确的路径,但在解决方案级别完全没问题。

在我的MSBuild.exe命令行上,我添加了一个参数如下:

/property:SolutionDir="(path of my solution)"

这成功了。

我也尝试过更改项目设置,但 NuGet 总是替换它们;上面的方式是我让它工作的唯一方法。