VS2017调试元组任务时出错

Sha*_*iro 6 c# visual-studio c#-7.0 visual-studio-2017

使用元组任务时,我无法查看调试信息.EG当一个断点被击中时,我无法在悬停,本地窗口或观察窗口中查看任何变量.

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*idG 9

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

GitHub的问题评论从MS员工说这是固定的.

与此同时,来自20174月13日的GitHub评论:

我可以确认使用ValueTuple 4.3.0的bug重新编译,但不能使用4.3.0-preview1-24530-04.

您可以通过NuGet包管理器/管理NuGet包解决方案界面安装"预览"版本.只需4.3.0-preview1-24530-04从"版本:"下拉列表中选择,然后单击"安装"即可.

人们希望,在Visual Studio的下一次更新之后,不需要使用包的"预览"版本.正如前面提到的评论所指出的,不清楚为什么使用包的"预览"版本可以避免触发错误.但显然,如果可以,最好能够使用最新的"稳定"版本的包装; 谁知道自"预览"版本以来发生了哪些变化,这些变化会在调试器或其他方面导致其他一些难以诊断的错误.