Command line MSTest.exe是否未复制所有需要的项目DLL?

Command line MSTest.exe是否未复制所有需要的项目DLL?,command-line,mstest,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.testsetting

我正试图让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>

{92EC1999-CC0C-47DD-A4D6-17C3B1233C50}
MyProject.Services.Server
{8E2E7BA9-75DB-458E-A184-AC1030EAD581}
MyProject.ServiceConfiguration.Interfaces
{39514766-23A8-45DB-96EA-B6B4D9C8B086}
MyProject.ServiceConfiguration.Services
ServiceConfiguration.Interfaces和ServiceConfiguration.Services DLL均未放置在TestResults的Out文件夹中

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


命令行中是否缺少某些内容?

mstest.exe不会隐藏所有引用的dll


请参阅位于

的博客文章。您可以使用测试设置文件指定将哪些文件复制到测试目录。您可以在VisualStudio中创建多个测试设置文件,这样就可以有一个用于从VS运行,另一个用于从MSTest运行,另一个用于服务器CI生成,等等。有关更多信息,请参见此处:

使用
/testsettings:
选项在命令行上指定它

一开始让人困惑的是,默认情况下,MSTest的“当前目录”不是MSTest启动目录,而是测试结果的Out文件夹

如前所述,MSTest无法正确推断所有使用的程序集,如果您没有直接引用,它将不会复制该程序集。也就是说,VisualStudio在其构建中也有类似的行为,所以很多人通过添加虚假代码引用来解决这个问题——这是一个糟糕的解决方案——我不推荐这样做


但是,本机DLL的问题更大,我发现在测试配置(测试设置)中显式复制它们对它们有效,就像对托管程序集一样。

它是转到外部还是生成区域取决于不同的因素,但是,对于仍然不起作用的情况,您可以使用DeploymentItem“hack”,或者调整您的runsettings文件


试着看看这个答案:

我通常通过在单元测试dll的AssemblyInit.cs中创建一个方法来解决这个问题,在这里我显式地对那些需要它的dll:s进行伪调用(通常是插件类型的dll:s,因为它们不是从测试代码本身显式调用的)。似乎这种行为在VS2019中仍然存在,我刚刚注意到,如果应用了任何[DeploymentItem],所有测试工作文件夹都将是TestResult\Deployxxx\Out,而不是UnitTest Project debug文件夹,因为dll复制的行为,测试用例会因为缺少dll而失败。我没有找到选项“/searchpathroot”在.Related post中,您将如何在测试设置中配置这些本机DLL?