使用元组任务时,我无法查看调试信息.例如.当他的命中断点时,我无法在悬停,本地窗口或监视窗口中查看任何变量.
repro只是创建一个新的WPF应用程序,添加System.ValueTuple,将此代码添加到MainWindow.xaml.cs,然后使用“return”在两行设置断点.
using System.Threading.Tasks; using System.Windows; namespace WpfApp2 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private async void Button_Click(object sender,RoutedEventArgs e) { var task1 = TaskWithLocalDebugInfo(); var task2 = TaskWithoutLocalDebugInfo(); } private async Task<bool> TaskWithLocalDebugInfo() { var viewableInLocalWindowAndHover = true; return viewableInLocalWindowAndHover; } private async Task<(bool,bool)> TaskWithoutLocalDebugInfo() { var notViewableInLocalWindowAndHover = true; return (notViewableInLocalWindowAndHover,notViewableInLocalWindowAndHover); } } }
解决方法
这是当前版本的Visual Studio 2017中的一个错误.它已经修复,将在下一季度发布.
请参阅MS员工的GitHub issue和comment,说它已修复.
与此同时,来自G00Hub对Apr 13,2017的评论:
i can confirm that the bug repros with ValueTuple 4.3.0,but not with 4.3.0-preview1-24530-04.
您可以通过NuGet包管理器/管理NuGet包解决方案界面安装“预览”版本.只需从“版本:”下拉列表中选择4.3.0-preview1-24530-04,然后单击“安装”.
人们希望,在Visual Studio的下一次更新之后,不需要使用包的“预览”版本.正如前面提到的评论所指出的,不清楚为什么使用包的“预览”版本可以避免触发错误.但显然,如果可以,最好能够使用最新的“稳定”版本的包装;谁知道自“预览”版本以来发生了哪些变化,这些变化会在调试器或其他方面导致其他一些难以诊断的错误.