【问题标题】:Not all projects under the same solution see the NuGet package并非同一解决方案下的所有项目都看到 NuGet 包
【发布时间】:2020-01-13 17:23:48
【问题描述】:

我有一个 C++ 解决方案,它下面有两个项目。一个项目正在生成一个 .lib 库,另一个项目使用它并在 Visual Studio 2019 上生成一个 .exe 可执行文件。第一个项目使用 pthread,它们的属性中都有指向 pthread 库的路径。

我想从“外部”pthread 库转移到使用 NuGet 中的库。我从 NuGet 下载了 pthread,并从两个项目的属性中删除了外部库的路径。

结果,第一个项目编译没有问题,但第二个项目失败,原因是:

错误 C1083 无法打开包含文件:'pthread.h':没有这样的文件或目录

另外,当打开两个项目的属性时,在第一个项目的属性中,我可以看到“项目主设置”和“引用包”类别出现,但它们没有出现在第二个项目中。

如何使两个项目都可以使用 NuGet 包?

【问题讨论】:

  • 你好,你们两个项目的项目类型是什么?
  • 你是如何为这两个项目安装 nuget 包的?您是否通过右键单击解决方案或项目来安装 nuget 包?

标签: visual-c++ nuget visual-studio-2019


【解决方案1】:

此外,当打开两个项目的属性时,在属性 在第一个项目中,我可以看到“项目主设置”和 “Referenced Packages”类别出现了,但它们没有出现在 第二个项目。

如何使两个项目都可以使用 NuGet 包?

问题是您没有将nuget包pthreads同时安装到第二个项目中。使用 C++ 的项目参考或任何其他方法不会将文件 pthread.h 复制到第二个项目中。

我认为您只需将名为 pthreads 的 nuget 包安装到 lib 库项目中,然后 .exe 项目引用 lib 项目。在这种情况下,pthread.h 文件不会从第一个项目复制到第二个项目,这与.Net 项目确实不同。

其实,你应该在每个使用它的项目中安装 nuget 包。

解决方案

所以要解决这个问题,你应该同时在第二个项目上安装 pthreads nuget 包。右键单击项目(它没有菜单Referenced Packages)-->选择Manage NuGet Packages并搜索nuget pthreads进行安装。

另外,如果整个解决方案的项目都使用这个nuget包,可以在解决方案上右键-->选择Manage NuGet Packages for Solution...

另外,当你构建项目时遇到这个错误Error C2011 'timespec': 'struct' type redefinition,可以在上面加上这段代码#include<pthread.h>:

#define HAVE_STRUCT_TIMESPEC

希望对你有帮助。

【讨论】:

  • 他们似乎都有相同的 NuGet 包管理器,并且它显示为两者都安装了包,我试图从另一个项目卸载并安装它,它没有工作。我正在放弃并转回拥有库并指向它的“正常”方法。
  • 我想知道你的 c++ 项目的类型是什么,请与我分享。您可以按照我的步骤:创建一个新的 c++ 静态库项目和一个 c++ 控制台应用程序。其次,在solution explorer中的每个项目上右击,选择nuget package manager ,在搜索框中输入pthreads,最好选择最新的2.9.1.4版本安装。之后,单击install。查看项目中是否安装了nuget,可以在项目上右键-->Nuget包管理器-->已安装查看pthreads是否存在。
  • 最后,可以相互添加任意项目引用。我这边是没有这个错误的,安装包的时候请先通过Tools-->Options-->Nuget Package Manager-->@987654345清理nuget缓存@。并将项目类型信息分享给我们,我们可以判断是不支持特定项目类型的问题还是其他问题。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多