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.
这是当前版本的Visual Studio 2017中的一个错误.它已经修复,将在下一季度发布.
我可以确认使用ValueTuple 4.3.0的bug重新编译,但不能使用4.3.0-preview1-24530-04.
您可以通过NuGet包管理器/管理NuGet包解决方案界面安装"预览"版本.只需4.3.0-preview1-24530-04从"版本:"下拉列表中选择,然后单击"安装"即可.
人们希望,在Visual Studio的下一次更新之后,不需要使用包的"预览"版本.正如前面提到的评论所指出的,不清楚为什么使用包的"预览"版本可以避免触发错误.但显然,如果可以,最好能够使用最新的"稳定"版本的包装; 谁知道自"预览"版本以来发生了哪些变化,这些变化会在调试器或其他方面导致其他一些难以诊断的错误.