VS2017调试元组任务时出错

时间:2017-03-24 17:55:57

标签: c# visual-studio visual-studio-2017 c#-7.0

使用元组任务时,我无法查看调试信息。例如。当他的命中断点时,我无法在悬停,本地窗口或监视窗口中查看任何变量。

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);
        }
    }
}

编辑:如果我添加要观看的不可见局部变量,我会得到:error CS8182: Predefined type 'ValueTuple`2' must be a struct.

2 个答案:

答案 0 :(得分:9)

这是当前版本的Visual Studio 2017中的一个错误。它已经修复,将在下一季度版本中发布。

请参阅MS员工的GitHub issuecomment,说明其已修复。

与此同时,来自GitHub对Apr 13, 2017的评论:

  

我可以使用ValueTuple 4.3.0确认错误,但不能使用4.3.0-preview1-24530-04。

您可以安装&#34;预览&#34;版本通过NuGet包管理器/管理NuGet包解决方案界面。只需从&#34;版本中选择4.3.0-preview1-24530-04:&#34;下拉并点击&#34;安装&#34;。

有人希望,在Visual Studio的下一次更新之后,使用&#34;预览&#34;包的版本没有必要。正如前面提到的评论所指出的那样,为什么使用&#34;预览&#34;包的版本避免触发错误。但显然最好能够使用最新的&#34;稳定的&#34;如果可以的话,包的版本;谁知道自&#34;预览&#34;以来发生了什么变化?在调试器或其他方面会导致某些其他难以诊断的错误的版本。

答案 1 :(得分:1)

在观看窗口中看到错误后,我记得C#7中有一个新的ValueTask。所以我添加了包system.threading.tasks.extensions并将已损坏的方法更改为使用ValueTask而不是Task

private static async ValueTask<(bool, bool)> TaskWithoutLocalDebugInfo()
{
    var notViewableInLocalWindowAndHover = true;
    return (notViewableInLocalWindowAndHover, notViewableInLocalWindowAndHover);
}

我现在可以看到调试信息。