TFS测试与框架设置不匹配。

46
我试图将一个解决方案从TFS 2012迁移到TFS 2018 SP2RC2,但是我无法正确运行单元测试。 所有项目都已重新定位到4.7.1,并且构建为x86平台。 我们有一个testsettings文件,仅提供部署项。 我正在使用新的VSTest Platform Installer任务(根据MS的指示),以及VS Test任务。 在测试运行开始时,我收到以下消息:
Test run will use DLL(s) built for framework .NETFramework,Version=v4.5 and platform X86. Following DLL(s) do not match framework/platform settings.

所以所有的测试都被跳过了,因为它们针对的是4.7.1。这个4.5的设置从哪里来?我找不到任何指定它的地方,也无法弄清楚如何更改它。


跳过的程序集列表是什么?我这样问是因为它可能只是针对.NET 4.5(比如NuGet包)的依赖程序集,你实际上有一个完全不同的问题。 - Daniel Mann
此外,TFS 2018 Update 2 RTM 今天已经发布了,更新一下可能是个好主意。 - Daniel Mann
@DanielMann 它跳过了我们所有的程序集。该任务只查看名称中带有“Test”的程序集,但它们都被跳过了。由于我们处于严格监管(医疗)领域,我们实际上不使用第三方工具。 - Sam
似乎这只是在使用testsettings文件时出现的问题。没有它,测试开始运行。当然,这样一些项目就无法部署。我知道testsettings文件在这一点上已经过时了,但这是否只是强制它到4.5? - Sam
使用 testsettings 强制使用 mstest.exe 而不是 vstest.console.exe。请改用 runsettings - jessehouwing
9个回答

17

您可以在VSTest中指定一个名为/Framework:的参数。

在您的情况下,您应该指定/Framework:.NETFramework,Version=v4.7.1

请参阅https://msdn.microsoft.com/en-us/library/jj155796.aspx?f=255&mspperror=-2147217396以获取更多信息。

要在Azure DepOps yaml管道中添加此参数,请使用otherConsoleOptions参数。

- task: VSTest@2
    otherConsoleOptions: '/Framework:.NETFramework,Version=v4.7.1'

2
谢谢!在我的 AZDO 管道中,我遇到了以下错误。将此命令添加到我的 vstest 任务中解决了它 - /Framework:.NETCoreApp,Version=v2.0测试运行将使用为框架 .NETFramework,Version=v4.0 和平台 X86 构建的 DLL。以下 DLL 不匹配框架/平台设置。 MyProject.UnitTest.dll 是为 Framework 2.0 和 Platform AnyCPU 构建的。 - bla9x
2
@Lara - 你能在VS2019中修复这个问题吗? - Cosmin
@Cosmin,恐怕不行。 - user1908746
2
看起来在最新的预览版中,他们已经修复了这个问题 - https://developercommunity.visualstudio.com/content/problem/579073/test-discovery-reporting-dlls-do-not-match.html。我还没有亲自确认过。 - Cosmin
2
我在Azure Pipelines(Azure DevOps)中遇到了这样的问题,将以下行添加到VSTest任务中即可解决:otherConsoleOptions: '/Framework:.NETStandard,Version=v2.0'。 - Ola Eldøy
显示剩余2条评论

7
我在Visual Studio中找到的解决方法比我想象中更容易:
  1. 退出所有VS实例
  2. 在Windows资源管理器中打开您的项目文件夹,找到.vs文件夹,将其删除
  3. 重新启动VS,文件夹会自动重建,测试就可以正常工作了。
显然,NUnit插件会将一些设置存储在这个文件夹中,并且它们是二进制的,因此无法编辑。 这发生在我更新到NUnit3TestAdapter版本3.17之后。

这对我很有帮助,尽管它是 .vscode 文件夹,而不是 .vs。在我的情况下,我回到了一个使用 .NET v2.1 的早期版本。较新版本使用 .NET v6.0,按照 Dennis 的步骤清除了较新的 .NET 版本后,我的项目成功运行。 - Richard Ruge
删除“.vs”文件夹对我来说确实解决了问题,但是该文件夹在我的解决方案中的位置不同。它也被标记为隐藏。因此,请确保从Windows资源管理器的“查看”菜单中打开“显示隐藏的文件和文件夹”。 - Bucket

2

对于我来说,在本地运行VS2022时跳过测试与testsettings文件有关。我删除了我的项目的.vs文件夹,然后选择 测试->配置运行设置->选择自动检测运行设置文件 之后,我就可以调试单元测试了。


1
我在另一台机器上运行一个测试项目时遇到了问题,在MSTest测试运行器中无法运行任何测试。除了您的问题消息外,我还收到以下消息: 请确保已注册测试发现器和执行器,并且平台和框架版本设置正确,然后重试。 发现测试完成:0个被找到。
在我的情况下,我通过卸载并更新.csproj文件,在根标签下直接添加以下导入解决了这个问题: <Import Project="..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.3.2\build\net45\MSTest.TestAdapter.props')" /> 希望这个答案能帮助节省您的时间。

1

我在使用Visual Studio 2019和NUnit 3.12.0时遇到了这个错误:

测试运行将使用为.NETFramework,版本为v4.5和平台X86构建的DLL。以下DLL与框架/平台设置不匹配。 Project.UnitTests.dll是为Framework 4.5.2和Platform AnyCPU构建的。

安装了NUnit3TestAdapter 3.13.0,然后一切都开始正常工作了。不需要修改框架版本或CPU设置。


这对我也起作用了。使用MSTest进行测试,在DevOps中使用Visual Studio测试任务并使用MSTest.Adapter运行时失败。安装NUnit3TestAdapter后,所有测试都正常运行。有什么想法为什么NUnit3TestAdapter可以解决这个问题? - Joel Lister
1
@JoelLister 不,我只是很高兴它能够正常工作,没有进一步调查。 - Ogglas

1
TLDR: 如果您的测试项目使用 *.runsettings 文件,请尝试移除 TargetFrameworkVersion 节点。
我遇到了类似的问题,但是与 .Net Core 有关。

测试运行将使用为框架 .NETFramework,Version=v4.0 和平台 X64 构建的 DLL。以下 DLL 不符合框架/平台设置。MyProject.Tests.dll 是为框架 .NETCoreApp,Version=v3.1 和平台 AnyCPU 构建的。

事实证明还有另一个问题。对于我的其他 .NET Framework 测试项目,我已经定义了 *.runsettings 文件。

Selecting runsettings file

在这个文件中我有

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
    <!-- Parameters used by tests at runtime -->
    <TestRunParameters>
        <Parameter name="ConnectionString" value="Data Source=localhost;Initial Catalog=MyDatabase;Integrated Security=True" />
    </TestRunParameters>
    <RunConfiguration>
        <!-- Framework35 | [Framework40] | Framework45 | FrameworkCore10-->
        <TargetFrameworkVersion>Framework40</TargetFrameworkVersion>
    </RunConfiguration>
</RunSettings>

基于https://learn.microsoft.com/en-us/visualstudio/test/configure-unit-tests-by-using-a-dot-runsettings-file?view=vs-2019,支持的TargerFrameworkVersions值如下:

FrameworkCore10适用于.NET Core源代码,FrameworkUap10适用于基于UWP的源代码,Framework45适用于.NET Framework 4.5及更高版本,Framework40适用于.NET Framework 4.0,Framework35适用于.NET Framework 3.5。

但是对于Core 3.1,FrameworkCore10无法使用!

因此,我完全删除了节点TargetFrameworkVersion


1

我和Bill遇到了完全相同的问题,都是在VS2019中处理遗留代码,其他方法都没有奏效。我只需更改运行设置以使用“自动检测”即可解决。

在菜单中选择“测试” -> “配置运行设置” -> “自动检测运行设置文件”。


在VS2017中,没有自动检测功能,因此你必须手动设置为x86或x64。该链接也显示了这一点:https://github.com/Microsoft/vstest/issues/907 - Sven Möhring

0

我在一个旧项目中使用VS 2019时遇到了同样的问题。

重启Visual Studio没有帮助,Release构建后重新以Debug方式构建也没有帮助,删除.vs文件夹也没有帮助。我尝试了这些方法,但每次在测试检测期间都会收到类似于OP的消息,仍然无法运行测试。我在此提及这些是为了完整性。

我从Solution Explorer中删除了LocalTestRun.testrunconfig文件和*.vsmdi文件,清理并重新构建解决方案,然后单元测试再次正常工作。


0

在将 .csproj 测试项目从 .NetFramework 4.6.1 升级到 .NetCore 3.1 后,在 Azure Devops 2019 管道中使用 Visual Studio Test Task 版本 2 遇到了相同的问题。

我们的解决方法是在指定测试文件时更加具体。默认的 **\*test*.dll 找到了其他几个带有 "test" 的程序集,这些程序集在升级之前不存在。使用显式的 **\.dll 解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接