C# 为什么此代码会使Visual Studio 2015崩溃?

C# 为什么此代码会使Visual Studio 2015崩溃?,c#,visual-studio,visual-studio-2015,roslyn,C#,Visual Studio,Visual Studio 2015,Roslyn,出于某种原因,即使在VisualStudio中将其输入到C#文件中,也足以导致其立即崩溃。为什么? unsafe struct node { node*[] child; } 这似乎发生在IDE开始为关键字等着色时 在TIO中尝试它会弹出csc.exe,代码为1,这没有多大帮助 虽然C#中的数组声明与C/C++中的数组声明不同,但上面的声明似乎应该是完全有效的。为什么不是,为什么它会使VisualStudio崩溃 我的Visual Studio版本是14.0.23107。这是一个。此错

出于某种原因,即使在VisualStudio中将其输入到C#文件中,也足以导致其立即崩溃。为什么?

unsafe struct node {
    node*[] child;
}
这似乎发生在IDE开始为关键字等着色时

在TIO中尝试它会弹出
csc.exe,代码为1
,这没有多大帮助

虽然C#中的数组声明与C/C++中的数组声明不同,但上面的声明似乎应该是完全有效的。为什么不是,为什么它会使VisualStudio崩溃

我的Visual Studio版本是14.0.23107。

这是一个。此错误将影响使用Roslyn的任何Visual Studio版本

如果我理解正确的话,内置Roslyn的Visual Studio的第一个版本是2015年。在此之前,我认为它只能作为一个扩展。因此,Visual Studio 2013及之前的版本应不受影响

这件事将在晚上解决。目前,该版本尚未排定日程

因为这是Roslyn中的一个bug,您可以通过在旧版本的Visual Studio中编辑和编译包含
不安全结构的代码来“绕过”它,该版本早于Roslyn。Visual Studio 2012应该可以工作。然后可以在当前软件中使用生成的.DLL


如果您自己构建Roslyn,则可以使用未经验证的修复程序。修理工作是在年完成的

VS 2012产生编译错误:
无法获取托管类型的地址、大小或声明指向托管类型的指针
VS2017立即关闭到LINQPad。StackoverflowException。我发现了一个现有错误:FWIW您的代码无效,因为您无法获取指向C#中包含托管对象的结构的指针。数组是一个托管对象。因此,即使VS没有崩溃,该代码也无法编译。根据这一点,您符合第3步或第4步的资格:介于令人敬畏和传奇之间。正确回答这一点很好:这个问题可能在今天的10k工具最佳问题中。所以这就是20k;)@Jean-Françoisfar什么是“今天10k工具最佳问题”?。这个问题确实是#1。似乎我是对的:)从
LarsTech
Lucas Trzesniewski
的评论(对问题,不是这里)可以明显看出,当前的代码是无效的,因为如果结构包含引用类型,则不能使用指向该结构的指针,而数组是引用类型。因此,答案中有关使用旧编译器编译和移植DLL的部分可能与此无关。除非有人知道某个案例受此bug影响,但实际上会使用Visual Studio 2012(或其他非Roslyn编译器)进行编译?顺便说一下,我认为Mono编译器还有其他问题(允许太多的指针)。