You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何让测试项目复用DLL项目已引入的NuGet包

解决测试项目复用DLL项目NuGet依赖的问题

没问题,我来给你梳理下怎么让测试项目复用DLL项目里已经装的OpenCV 4.2 NuGet包,不用再重复安装。毕竟重复装包确实在某些场景下不太合适,比如要保持依赖版本完全一致或者节省空间。下面是具体的操作步骤:

1. 用项目引用替代手动链接lib文件

首先别再手动添加DLL的lib文件引用了,直接让测试项目引用你的自定义DLL项目:

  • 右键测试项目 → 添加 → 项目引用
  • 在弹出的窗口里勾选你的DLL项目,点击确定。
    这样Visual Studio会自动处理部分依赖的传递,但默认情况下NuGet的C++包不会自动传递,所以需要下一步配置。

2. 开启DLL项目的NuGet依赖传递性

打开你的DLL项目的*.vcxproj文件(可以右键项目→卸载项目,再右键→编辑xxx.vcxproj),找到对应OpenCV的PackageReference节点,添加PrivateAssets="none"属性,比如:

<PackageReference Include="opencv4.2" Version="你的版本号">
  <PrivateAssets>none</PrivateAssets>
</PackageReference>

这个属性的作用是告诉VS:这个NuGet包的依赖可以传递给引用当前项目的其他项目(也就是你的测试项目)。如果不添加这个,测试项目不会自动继承DLL项目的NuGet依赖配置。

3. 手动导入OpenCV的NuGet配置文件(如果传递性不生效)

如果上面的步骤后测试项目还是找不到OpenCV的库,可以手动导入NuGet生成的配置文件:

  • 同样编辑测试项目的*.vcxproj文件,在合适的位置(比如<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />之前)添加:
<Import Project="$(SolutionDir)packages\opencv4.2.你的版本号\build\native\opencv4.2.props" Condition="Exists('$(SolutionDir)packages\opencv4.2.你的版本号\build\native\opencv4.2.props')" />

这个props文件里已经包含了OpenCV的包含目录、库目录和链接依赖,导入后测试项目就会自动继承这些配置,不用手动填路径。

4. 确保NuGet包的存储路径一致

为了避免路径引用出错,要保证两个项目的NuGet包都存在同一个目录下:

  • 右键解决方案 → 管理解决方案的NuGet程序包 → 设置
  • 在包还原选项里,勾选“在解决方案目录中存储包”,这样所有项目的NuGet包都会放在解决方案根目录的packages文件夹里,路径引用不会因为项目位置不同而出错。

额外提示

如果你的测试项目和DLL项目的平台(x86/x64)、工具集(比如v142)不一致,也会导致找不到库的问题,记得先把两个项目的这些配置统一。

内容的提问来源于stack exchange,提问作者Miggo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:22:43