如何在Visual Studio 2017中为特定目标框架运行单元测试?

Nig*_*888 31 .net c# multitargeting visual-studio visual-studio-2017

我真的很喜欢这种新.csproj格式.它比可怕的(有限的)好得多project.json.

但是,有一件事我想解决.我已将我的(多个)测试项目合并到一个多目标项目中.

<TargetFrameworks>netcoreapp1.0;net40;net35</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

但是,在Visual Studio中的测试资源管理器中似乎没有任何工具来选择目标框架 - 它总是只运行第一个.我找到了一个解决方法 - 添加一个<TargetFramework>具有特定框架的元素......

<TargetFramework>net35</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法选择目标框架而不需要手工编辑MSBuild(.csproj)文件?我正在寻找GUI中的一些选项来执行此操作 - 特别是因此我不必记住编辑.csproj文件以便在调试测试之前切换框架或记住在发布之前必须删除此行.

And*_*nov 5

我知道,问题是关于VS,但我发现,针对多种框架时有用dotnet tests命令将运行所有测试框架<TargetFrameworks>的节点:

> dotnet test
...
Test run for [projectPath]\bin\Debug\netcoreapp1.1\XUnitTestProject.dll(.NETCoreApp,Version=v1.1)
...
Test run for [projectPath]\bin\Debug\net461\XUnitTestProject.dll(.NETFramework,Version=v4.6.1)
...
Run Code Online (Sandbox Code Playgroud)

NCrunch还可以识别多个目标并自动为每个目标运行测试:

在此输入图像描述


Nig*_*888 2

事实证明,微软终于在 Visual Studio 2019 中修复了这个问题(不确定具体时间)。

如果您指定多个目标框架:

<TargetFrameworks>netcoreapp2.1;net451</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

GUI 现在显示:

在此输入图像描述

并允许您同时在所有目标平台上运行测试。