我最近基于Google Test创建了一个C++ Visual Studio 2017单元测试项目(vcxproj)。我使用了 * 文件/新建/项目/已安装/Visual C++/测试/Google Test*。
这将创建一个package.config文件:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn" version="1.8.0" targetFramework="native" />
</packages>
它还在我的解决方案中创建了一个packages
目录,并将googletest
包放在其中。此目录包含二进制库(没有源代码),因此我没有将packages
目录添加到修订控制中。我的假设是,如果包丢失,Visual Studio会重新下载(使用nuget或其他方法)。
然而,当我克隆存储库并重新启动时,单元测试项目拒绝打开(“load failed”),因为在其import语句中提到的packages目录不存在:
<Import Project="..\packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.0\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.targets" />
我看了这篇文章,里面似乎有一些提示:https://learn.microsoft.com/en-gb/nuget/consume-packages/package-restore
他们建议启用“在构建过程中自动检查丢失的包”。我的复选框已经被选中了,所以我猜在项目加载之前它不能构建。
正确的方法是什么?我应该签入packages
还是有其他方法可以自动获取包(就像VS创建我的项目时所做的那样)?
更新:我可以在命令行上使用nuget restore -SolutionDir xyz
手动恢复packages目录,但是有没有办法在项目打开之前自动触发这个操作?
2条答案
按热度按时间lnxxn5zx1#
什么是正确的处理方式?
您应该将条件添加到Import target:
当我们创建Google Test项目时,默认情况下会将
.targets
文件导入到项目文件.vcxproj
中。您可以卸载项目并编辑它,您将遵循以下导入语句:不确定为什么
Condition="Exists('..\packages\xx.targets')"
在您的import语句中丢失,要解决此问题,请将条件添加到Import目标。希望这个有用。
5cg8jx4n2#
我在添加Google测试项目时遇到了同样的问题。根据微软的文档https://learn.microsoft.com/en-gb/nuget/consume-packages/package-restore提到,实际上只有
nuget restore myproject.sln
和msbuild restore
可以像默认的Google测试项目一样工作于packages.config
项目。下面两种方法对我很有效:nuget restore myproject.sln
msbuild -p:RestorePackagesConfig=true -t:restore myproject.sln
这两个命令都使用GoogleTest包生成了我的packages目录