我正在开发一个包含许多解决方案和更多项目的大型代码库。
当我编写单元测试时,它们通常依赖于存在的多个dll,这些dll由其他解决方案构建到我当前解决方案的不同输出文件夹中。
我通常会添加构建步骤,将所需的dll复制到当前解决方案的输出文件夹中,以便在运行单元测试时找到它们。这可能会导致大量浪费的空间和重复的dll混淆,并且每个dll的主副本都应该进入安装程序。
有没有更好的方法来添加其他搜索目录?
我正在考虑使用一个TEST_MODULE_INITIALIZE来添加AddDllDirectory(),然后将dll标记为延迟加载,这样当它们加载时,将会搜索添加的dll目录。但是,我不认为这有效,因为你必须将dll标记为exe中加载的延迟。但是,exe是我无法控制的测试者。
答案 0 :(得分:3)
您的考虑绝对正确。您可以通过这种方式在VS testrunner上下文中加载依赖dll,就像枪一样:
1)设置您的测试项目以将所有必需的dll部署到输出目录中(例如,在pre \ post-build步骤的帮助下)
2)在测试项目设置中设置dll的延迟加载。 (测试项目属性-Linker-Input-Delay加载的dlls =输入依赖dll列表)
3)设置目录以搜索dll。它可以是TEST_MODULE_INITIALIZE或TEST_CLASS_INITIALIZE。简单的情况是使用SetDllDirectory来实现此目的。如果您想使用AddDllDirectory - 请使用它carefully:
如果首先使用LOAD_LIBRARY_SEARCH_USER_DIRS调用SetDefaultDllDirectories,则使用AddDllDirectory指定的目录将添加到进程DLL搜索路径中。否则,使用AddDllDirectory函数指定的目录仅用于指定LOAD_LIBRARY_SEARCH_USER_DIRS的LoadLibraryEx函数调用。