您如何 运行 在 Visual Studio 2017/2019 中针对特定目标框架进行单元测试?

How do you run unit tests for a specific target framework in Visual Studio 2017/2019?

我真的很喜欢新的 .csproj 格式。它比可怕的(有限的)project.json.

好多了

但是,我正在努力解决一件事。我已将我的(多个)测试项目合并为一个多目标项目。

<TargetFrameworks>netcoreapp1.0;net40;net35</TargetFrameworks>

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

<TargetFramework>net35</TargetFramework>

但是,有什么方法可以 select 目标框架而无需手动编辑 MSBuild (.csproj) 文件?我正在 GUI 中寻找一些选项来执行此操作 - 特别是这样我就不必记住编辑 .csproj 文件以在调试测试之前切换框架,或者记住必须在之前删除此行发布。

使用 'or' 运算符在运行设置文件中使用 TargetFrameWorkVersion。

我知道这个问题是关于 VS 的,但我发现当针对多个框架 dotnet tests 命令 will run tests for all frameworks in <TargetFrameworks> node:

时很有用
> 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)
...

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

目前最好的选择是更改目标框架在 csproj 中的顺序。

<PropertyGroup>
    <TargetFrameworks>netcoreapp2.1;net45;net46;net461;net462;net47</TargetFrameworks>
</PropertyGroup>

如果要调试 net45 框架的单元测试,您需要将其更改为:

<PropertyGroup>
    <TargetFrameworks>net45;net46;net461;net462;net47;netcoreapp2.1</TargetFrameworks>
</PropertyGroup>

在 Visual Studio 中执行此操作的 UI 实施起来相对简单,但截至此答案他们还没有这样做。

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

如果指定多个目标框架:

<TargetFrameworks>netcoreapp2.1;net451</TargetFrameworks>

GUI 现在显示:

并让您 运行 一次在所有目标平台上进行测试。