远程执行MSTest批处理时出现vstest文件未找到错误求助
远程执行MSTest批处理时测试文件路径错误问题分析
批处理脚本
echo Setting path SET PATH=%PATH%;D:\My-Tests-Folder\TestPlatform\tools\net462\Common7\IDE\Extensions\TestPlatform cd "D:\My-Tests-Folder\MSTest" start cmd /k vstest.console.exe MyTestProject.dll /testcasefilter:TestCategory=Category123
场景描述
我用上述批处理运行Visual Studio 2019 MSTest项目的单元测试,已把测试项目所有DLL复制到D:\My-Tests-Folder\MSTest目录。本地执行批处理时,所有测试都能成功运行。
问题
把该文件夹复制到远程机器的D盘后,从本地访问远程文件夹执行批处理,出现以下错误:
The test source file "C:\Windows\MyTestProject.dll" provided was not found.
MyTestProject.dll实际在D:\My-Tests-Folder\MSTest目录,不在C:\Windows下。但通过远程桌面连接到远程机器后执行批处理却能成功,只有本地远程访问执行时失败,这是什么原因?
原因分析
- 远程执行时工作目录切换无效:从本地访问远程文件夹执行批处理时,
cd "D:\My-Tests-Folder\MSTest"切换的是本地机器的D盘目录,而非远程机器的D盘。此时vstest.console.exe会以本地的默认工作目录(通常是C:\Windows)去查找DLL,自然找不到。 - 远程桌面执行正常是因为批处理在远程机器的本地会话中运行,
cd命令正确切换了远程机器的目录,vstest.console.exe能定位到正确的DLL路径。
解决方案
- 使用绝对路径调用DLL:直接给
vstest.console.exe指定远程机器上DLL的绝对路径,避免依赖工作目录:echo Setting path SET PATH=%PATH%;D:\My-Tests-Folder\TestPlatform\tools\net462\Common7\IDE\Extensions\TestPlatform start cmd /k vstest.console.exe "D:\My-Tests-Folder\MSTest\MyTestProject.dll" /testcasefilter:TestCategory=Category123 - 在远程上下文执行批处理:使用
psexec这类工具,直接在远程机器的本地环境中运行批处理,确保所有命令都在远程机器的系统上下文生效。
内容的提问来源于stack exchange,提问作者StackTrace
相关产品推荐
相关产品推荐

