MSTest.exe没有复制所有需要的项目DLL?

时间:2011-11-10 17:09:56

标签: command-line mstest

我正在尝试运行MSTest.exe,而且似乎没有正确读取testcontainer;我的测试都在Visual Studio中的所有配置环境中成功运行。

我正在使用的命令是:

"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" /nologo /usestderr /testSettings:"C:\temp\MyProject\Sources\MyProject\Local.testsettings" /searchpathroot:"C:\temp\MyProject\Binaries" /resultsfileroot:"C:\temp\MyProject\TestResults" /testcontainer:"C:\temp\MyProject\Binaries\MyProject.Services.Server.UnitTests.dll" 

testcontainer项目中的项目引用如下所示:

<ItemGroup>
    <ProjectReference Include="..\..\Services\MyProject.Services.Server\MyProject.Services.Server.csproj">
        <Project>{92EC1999-CC0C-47DD-A4D6-17C3B1233C50}</Project>
        <Name>MyProject.Services.Server</Name>
    </ProjectReference>
    <ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Interfaces\MyProject.ServiceConfiguration.Interfaces.csproj">
        <Project>{8E2E7BA9-75DB-458E-A184-AC1030EAD581}</Project>
        <Name>MyProject.ServiceConfiguration.Interfaces</Name>
    </ProjectReference>
    <ProjectReference Include="..\..\SvcConfiguration\MyProject.ServiceConfiguration.Services\MyProject.ServiceConfiguration.Services.csproj">
        <Project>{39514766-23A8-45DB-96EA-B6B4D9C8B086}</Project>
        <Name>MyProject.ServiceConfiguration.Services</Name>
    </ProjectReference>
</ItemGroup>

ServiceConfiguration.Interfaces和ServiceConfiguration.Services DLL都没有放入TestResults的Out文件夹中。

项目GUID在引用和引用的项目之间匹配。

命令行中是否存在我遗漏的内容?

3 个答案:

答案 0 :(得分:5)

mstest.exe不会删除所有引用的dll。

https://web.archive.org/web/20111221110459/http://www.dotnetthoughts.net/2011/11/22/mstest-exe-does-not-deploy-all-items/

上查看有关此内容的博客文章

答案 1 :(得分:4)

您可以使用测试设置文件准确指定要复制到测试目录的文件。您可以在Visual Studio中创建多个测试设置文件,因此您可以使用一个用于从VS运行,另一个用于从MSTest运行,另一个用于服务器CI构建,依此类推。有关详细信息,请参阅此处:Create Test Settings to Run Automated Tests from Visual Studio

使用/testsettings:<filename>选项在命令行中指定它。

一开始似乎让人困惑的是,默认情况下,MSTest&#34;当前目录&#34;不是MSTest启动目录,而是测试结果的Out文件夹。

如前所述,MSTest未正确推断所有已使用的程序集,如果您没有直接引用,则不会复制程序集。也就是说,Visual Studio在构建过程中也有类似的行为,所以很多人通过添加伪造的代码引用来解决这个问题 - 这是一个糟糕的解决方案 - 我不推荐它。

但是,本机DLL甚至更成问题,我发现在测试配置中显式复制它们(测试设置)对它们起作用,就像托管程序集一样。

答案 2 :(得分:1)

无论是Out还是构建区域取决于不同的因素,但是,对于仍然无效的情况,您可以使用DeploymentItem“hack”,或者调整您的runsettings文件。

尝试查看此答案:https://stackoverflow.com/a/33344573/2537017