vstest.console.exe 忽略 app.config
Posted
技术标签:
【中文标题】vstest.console.exe 忽略 app.config【英文标题】:vstest.console.exe ignore app.config 【发布时间】:2015-10-16 01:22:08 【问题描述】:我在单元测试中遇到了 app.config 文件的一些问题。 vstest.console.exe 似乎忽略了它。当我使用 MStest 运行单元测试时,应用配置文件没有问题。
配置文件必须解决一些程序集问题(重定向程序集版本)。 这是这个文件的内容:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="RhinoCommon"
publicKeyToken="552281e97c755530"
culture="neutral" />
<bindingRedirect oldVersion="5.1.30000.4" newVersion="5.1.30000.14"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
当我将此代码移动到 machine.config 时,我的单元测试被成功重定向到使用另一个版本的程序集。但是这种解决我的装配问题的方法是不合适的。单元测试项目必须在构建服务器上运行,需要在应用层面解决这个问题。
在互联网上没有关于此类问题的信息。基于这个答案vstest.console.exe with /EnableCodeCoverage just "hangs"... how debug, and how to fix? 可以将应用程序配置添加到 vstest.executionengine.config (因为这是实际运行的 exe),但它对我不起作用,正如我之前所说,这个问题应该在应用程序上解决等级。
使用 MStest.exe,app.config 没有问题,但不适合我的情况。
有人见过这样的问题吗? 任何帮助将不胜感激。
【问题讨论】:
@jessehouwing 它有效。谢谢!但是,如果我为 Mstest 适配器指定设置是否意味着使用 MsTest.exe 执行测试? 我怀疑是由 MsTest 的 vstest。我会在微软的这种行为上落后。您使用的是哪个版本的 Visual Studio? @jessehouwing 我正在使用 Visual Studio Professional 2012 11.0.50727.1 【参考方案1】:通过添加包含以下内容的legacymode.runsettings
文件:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<MSTest>
<ForcedLegacyMode>true</ForcedLegacyMode>
</MSTest>
</RunSettings>
您将强制 Mstest 在旧模式下运行,但它也会返回程序集加载和从测试项目的 app.config
中获取设置的旧行为。
您也可以通过在构建定义的源代码控制存储库中指定 .runsettings
路径来为构建服务器配置旧模式:
Image source
【讨论】:
非常感谢。我会检查这个解决方案。 当我为 MStest 适配器指定设置时,我的测试由我试图避免的 mstest.exe 执行。因为使用 MStest 作为测试执行器会导致加载 c++ dll 出现问题。为了运行测试,一些 c++ dll 必须靠近测试程序集。在我将此 dll 部署到部署文件夹后,所有测试都失败并出现异常 System.DllNotFoundException: Unable to load DLL 'rhcommon_c': Invalid access to memory location。 (来自 HRESULT 的异常:0x800703E6)。只有在使用MStest时才会出现这样的问题。而且解决起来似乎很复杂。。也许你有什么想法? 这就是为什么我更喜欢使用 vstest.console.exe。至少可以通过将所有配置移至 machine.config 来解决应用程序配置问题。 最后的事情将通过将 c++ 库设置为测试程序集的内容项并在需要该项的测试方法或类上添加[DeploymentItem("clibrary.dll")]
属性来解决。我希望新的测试运行程序有完全相同的问题,因为它仍然运行相同的 mstest 基础设施。还是这些库依赖于平台 (x86\x64) 并且需要特定平台版本的 mstest?以上是关于vstest.console.exe 忽略 app.config的主要内容,如果未能解决你的问题,请参考以下文章
运行 vstest.console.exe 时如何过滤 NUnit 测试
测试用例在 docker windows 控制台中使用 https 失败 vstest.console.exe
vsts xunit vstest.console.exe失败,返回码为:1