首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vstest.console抛出System.IO.FileNotFoundException

vstest.console抛出System.IO.FileNotFoundException
EN

Stack Overflow用户
提问于 2014-10-10 11:58:33
回答 1查看 2.2K关注 0票数 2

我的应用程序有几个单元测试项目。所有其他项目和单元测试项目都构建到一个公共输出目录中。使用msbuild任务,我收集所有单元测试程序集并运行vstest.console.exe来测试这些程序集。

代码语言:javascript
复制
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\..\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "Assembly1.UnitTest.dll" "Assembly2.UnitTest.dll" /Platform:x64 /Framework:Framework40 /InIsolation /Logger:trx

这导致异常: System.IO.FileNotFoundException:无法加载文件或程序集“someassembly.dll”或其依赖项之一。找不到指定的模块。

当我为单个单元测试程序集执行vstest.console.exe时,不会出现上述异常。进一步的调查了解到,当同时测试多个程序集时,vstest.console将测试程序集和依赖程序集复制到"testresults“目录中的"out”目录中。但是,并非所有需要的程序集都由项目引用,而是手动复制到公共输出目录。这些程序集丢失在"testresults“中的"out”目录中,并导致System.IO.FileNotFoundException。

使用MSTest,我可以通过添加一个DeploymentItem来使用一个配置文件,指向公共输出目录。对于vstest.console来说,这已经行不通了。

我能做些什么来避免这种行为?我不想使用"out“目录。从公共输出目录运行我的单元测试是很好的。

PS。我也有关于TFS 2013构建定义的相同问题。我的构建定义正在收集*.unittest.dlls并使用Test执行这些定义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 07:57:46

解决方案是使用.runsettings文件。在运行设置文件中,可以指定"DeploymentEnabled“。默认情况下,这是正确的。将其更改为false并不会将所有程序集复制到TestResults目录的out目录。运行设置文件的更多信息:http://msdn.microsoft.com/en-us/library/jj635153.aspx

示例:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <!--Info: http://msdn.microsoft.com/en-us/library/jj635153.aspx -->
    <MSTest>
        <IgnoreTestImpact>True</IgnoreTestImpact>
        <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
        <CaptureTraceOutput>False</CaptureTraceOutput>
        <DeleteDeploymentDirectoryAfterTestRunIsComplete>True</DeleteDeploymentDirectoryAfterTestRunIsComplete>
        <DeploymentEnabled>False</DeploymentEnabled>
    </MSTest>
</RunSettings>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26298930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档