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

时间:2017-04-22 00:51:19

标签: c# .net visual-studio visual-studio-2017 multitargeting

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

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

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

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

<TargetFramework>net35</TargetFramework>

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

4 个答案:

答案 0 :(得分:5)

我知道问题是关于VS的,但我认为在dotnet tests节点中定位多个框架<TargetFrameworks>命令will run tests for all frameworks时很有用:

> 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还可以识别多个目标,并自动为每个目标运行测试:

enter image description here

答案 1 :(得分:0)

使用'或'运算符在runsettings文件中使用TargetFrameWorkVersion。

答案 2 :(得分:0)

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

bool

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

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

在Visual Studio中执行此操作的UI相对容易实现,但截至此答案,他们还没有这样做。

答案 3 :(得分:0)

事实证明,微软终于在Visual Studio 2019中对此进行了修复(不确定确切的时间)。

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

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

GUI现在显示:

enter image description here

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