如何使MSBuild自动下载解决方案/项目中引用的新nuget程序包?

时间:2020-06-03 12:13:42

标签: visual-c++ msbuild nuget googletest nuget-package-restore

我正在从项目的源代码构建googletest到使用Visual Studio 2019中使用nuget包Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1的过程。预警,这这是我第一次尝试进入Nuget,所以这个问题可能是我所缺少的非常基本的问题。

在VS IDE中进行构建/运行时,一切正常(AFAIK)。但是,在我的构建机器上(使用MSbuild自动进行构建并从源代码控制提交触发构建的情况下,测试项目无法构建,并显示以下错误:

注意:显然下面的路径已更改,但我确保目录嵌套级别相同

C:\ Path \ To \ Project \ SolutionName \ ProjectName \ TestsProject \ TestProject.vcxproj(215,5):错误:此项目引用了此计算机上缺少的NuGet程序包。使用NuGet软件包还原下载它们。有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=322105。丢失的文件是.... \ packages \ Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1 \ build \ native \ Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn .targets。

自动构建过程使用以下MSBuild命令进行构建:

msbuild ""C:\Path\To\Project\SolutionName\SolutionFile.sln"" /target:Rebuild /Property:Configuration=Release;Platform=x64 /m /consoleloggerparameters:ErrorsOnly /fileLogger /fileloggerparameters:LogFile=""C:\Path\To\Project\SolutionName\BuildLog.txt"" /flp1:LogFile=""C:\Path\To\Project\SolutionName\BuildErrors.txt"";ErrorsOnly /flp2:LogFile=""C:\Path\To\Project\SolutionName\BuildWarnings.txt"";WarningsOnly

我已经通过错误中的链接进行了无数次(特别是与MSBuild有关的文档部分)。这使我无法在上面的命令上添加一个额外的Restore目标(更改为.. / target:Restore; Rebuild ...),但这没有用(不记得确切的错误,但是我显然可以重复)如果有人在阅读更多内容后认为与之相关,则再次进行此操作)。我尝试了其他几次迭代,但是我现在所处的位置,我相信这样做是正确的方法,但是它不起作用,所以这就是为什么我在这里寻求帮助。现在,在上面的Build命令之前,我正在执行以下命令:

msbuild "C:\Path\To\Project\SolutionName\SolutionFile.sln" /target:Restore /Property:Configuration=Release;Platform=x64

此命令的输出为:

用于.NET Framework的Microsoft(R)Build Engine版本16.5.0 + d4cbfca49

版权所有(C)Microsoft Corporation。保留所有权利。

一次在此解决方案中构建项目。启用 并行构建,请添加“ -m”开关。

开始构建时间为6/3/2020 1:02:06 AM。

项目“ C:\ Path \ To \ Project \ SolutionName \ SolutionFile.sln” 节点1(还原目标)。 ValidateSolutionConfiguration:

构建解决方案配置“发行| x64”。 ValidateProjects:

未选择项目“ unrelated_project_in_solution_1”用于在解决方案配置“ Release | x64”中进行构建。

未选择项目“ unrelated_project_in_solution_2”用于在解决方案配置“ Release | x64”中进行构建。

未选择项目“ unrelated_project_in_solution_3”用于在解决方案中进行构建 配置“ Release | x64”。

还原:

无事可做。指定的项目均不包含要还原的软件包。

完成构建项目“ C:\ Path \ To \ Project \ SolutionName \ SolutionFile.sln”(还原目标)。

构建成功。 0警告 0个错误

经过的时间00:00:01.99

当然(由于还原没有执行任何操作),随之而来的是该项目无法构建,并出现了与添加命令之前相同的错误。

那么我在这里想念什么?我的逻辑思维过程告诉我项目文件没有引用nuget包,但它似乎在那里(在IDE和.vcxproj文件中),因此我对为什么不找到restore命令感到困惑它。

UPDATE1-好,在通读https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets之后,msbuild restore选项显然仅适用于PackageReference样式的项目,默认情况下,VS2019仍为C ++项目创建packages.config样式的项目。

因此,我似乎需要将项目切换为使用PackageReference,但我仍然不知道如何执行此操作,因为C ++项目似乎根本不支持PackageReference?还是只是迁移工具不适用于C ++项目? https://docs.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference

或者,我需要找到一种使用package.config样式项目自动管理安装的方法,但是我也不知道该怎么做。

UPDATE2- MSBuild中的本机C ++项目完全不支持PackageReference。这里有一个正在进行的讨论(最近由MSFT代表于2020年3月更新),说他们将增加对C ++ / Cli的支持,但是本机c ++需要做更多的工作。 https://developercommunity.visualstudio.com/idea/351636/use-packagereference-in-vcxproj.html 因此,我想我一直在MSBuild外部进行管理。

1 个答案:

答案 0 :(得分:0)

回到这里发布更新 2 作为答案,因为它现在仍然是最新的。

UPDATE2- MSBuild 中的本机 C++ 项目根本不支持 PackageReference。这里有一个正在进行的讨论(最后一次由 MSFT 代表于 2020 年 3 月更新)说他们将添加对 C++/Cli 的支持,但原生 C++ 需要做更多的工作。 https://developercommunity.visualstudio.com/idea/351636/use-packagereference-in-vcxproj.html 所以,我想我被困在 MSBuild 外部管理这个。