如何在 Visual Studio 中测试已编译的 DLL(或生成多个可执行文件)?

Posted

技术标签:

【中文标题】如何在 Visual Studio 中测试已编译的 DLL(或生成多个可执行文件)?【英文标题】:How to test compiled DLLs in Visual Studio (or produce several executables)? 【发布时间】:2017-09-12 06:18:59 【问题描述】:

我正在开发一个需要定期测试和分析的共享库。主要目标平台是 Linux(通常),所以我们的团队选择了自动工具(auto[scan,conf,make] + libtool + pkg-config)作为构建系统。然后客户决定他也想在 Windows 上安装他的软件。所以我添加了一个视觉工作室解决方案。该库在 Windows 上也可以编译、链接和运行良好,尽管我的开发周期缺乏在 Windows 上的适当测试。

我在 Linux 上使用 automake 的测试套件,测试如下:

make check -j2

它编译了 10 个可执行文件(客户端服务器对),这些可执行文件链接到我的库(已经在同一个构建系统上构建)并运行它们(成对,有序)。输出是:

make[3]: Entering directory 'somefakepath/libfoo/test'
PASS: tcp_client
PASS: tcp_server
PASS: tcp_client_control
PASS: tcp_server_control
PASS: udp_client
PASS: udp_server
PASS: udp_client_raw
PASS: udp_server_raw
SKIP: udp_client_rtp
SKIP: udp_server_rtp

========================================================
Testsuite summary for libfoo 5.0.1
========================================================    
# TOTAL: 10
# PASS:  8
# SKIP:  2
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
========================================================

问题是我找不到在 Visual Studio 中执行相同操作的方法。我可以在解决方案中添加另一个项目(使可执行文件而不是库),但据我所知,不可能从 Visual Studio [1]、[2] 的单个项目中生成多个可执行文件。而且添加十个项目感觉不对,每个项目的许多配置参数都设置为相同的值......而且选择具有多个线程的单个可执行文件也不是很好(我将不得不更改很多行,合并许多 [=10] 个文件)。

那么我如何在 Visual Studio 上测试我的库?或者可能从单个项目中的多个文件生成多个可执行文件? (我可以手动运行)

【问题讨论】:

【参考方案1】:

如果您的可执行文件之间的唯一区别是一些条件编译宏,那么您应该创建一个具有多个配置的单个可执行项目(即 udp_client_raw 配置、udp_server_raw 配置等)。如果它们在其他方面有所不同,您可能仍需要创建单独的项目。请注意,无需将许多配置参数设置为相同的值 - 您可以制作一次属性表,然后将其附加到所有项目。

从单个项目生成多个可执行文件没有问题。您只需使用 Visual Studio 中的批处理构建或使用命令行中的 msbuild 一次构建多个配置。也可以设置一个项目,将它们成对启动以进行测试。

【讨论】:

不。我的可执行文件非常不同,客户端/服务器程序,在预定义的协议上进行通信...... @sorush-r 然后采取第二种方法并创建几个项目。

以上是关于如何在 Visual Studio 中测试已编译的 DLL(或生成多个可执行文件)?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio:如果启用了编译器选项,如何测试(在代码/静态断言中)

如何摆脱 Visual Studio 中的错误?

通过 SWIG 和 Visual Studio 2015 在 Java 中使用已编译的 DLL

如何从命令行编译 Visual Studio 项目?

Visual Studio 注册表捕获实用程序已停止工作,在 Windows7 中编译 C# 项目时出错

在 Visual Studio 2019 中编译默认 Angular 项目时未找到(但已安装)node.js