Visual studio 2015 VS2015与“碰撞”;新的保护页……”;在编辑源代码时

Visual studio 2015 VS2015与“碰撞”;新的保护页……”;在编辑源代码时,visual-studio-2015,roslyn,code-contracts,Visual Studio 2015,Roslyn,Code Contracts,问题: Visual Studio 2015因以下错误而不断崩溃: 无法为堆栈创建新的保护页 背景: 在其他上下文中已经有一些关于此错误的问题,但它们似乎都与Visual Studio中的遗留COM代码或设计器工具的互操作有关。我只是想编辑一个C#源文件 以前,我只在使用代码契约XML文档工具ccdocgen.exe时见过这个错误。当我将VS2013与ccdocgen一起使用时,在构建时偶尔会出现错误,但它只会使ccdocgen崩溃,而不是VS。升级到VS2015后,如果我使用ccdocge

问题:

Visual Studio 2015因以下错误而不断崩溃:

无法为堆栈创建新的保护页

背景:

在其他上下文中已经有一些关于此错误的问题,但它们似乎都与Visual Studio中的遗留COM代码或设计器工具的互操作有关。我只是想编辑一个C#源文件

以前,我只在使用代码契约XML文档工具ccdocgen.exe时见过这个错误。当我将VS2013与ccdocgen一起使用时,在构建时偶尔会出现错误,但它只会使ccdocgen崩溃,而不是VS。升级到VS2015后,如果我使用ccdocgen构建任何使用匿名方法的东西时,我经常看到它,但直到现在,它仍然只是使ccdocgen崩溃,而不是VS。同样值得指出的是,当ccdocgen在构建时抛出错误时,错误对话框看起来略有不同

上下文:

我目前正在研究的解决方案使用代码契约作为前置条件和后置条件,但根本不使用静态检查器。我在编辑代码时遇到了这个错误,只是做了一些简单的事情,比如键入、选择文本、使用
Ctrl+C
Ctrl+X
。从那以后,我已经禁用了我目前正在处理的项目中的所有代码契约工具(但不是在整个解决方案中),但是错误仍然偶尔出现

根据对有关此错误消息的其他问题的回答,它是由某个地方的堆栈溢出引起的。由于这个错误是在编辑文本时发生的,而我在迁移到VS2015后才遇到它,所以我的假设是它与Roslyn正在进行的一些背景解析有关

一些代码:Edit:我发现这个属性的两个版本都被注释掉了,所以不是这样

这就是我认为引起问题的成员:

public DataView JoinedRecords =>
    (from r1 in Table1.AsEnumerable()
    join r2 in Table2.AsEnumerable()
           on r1.Field<int>("ID") equals r2.Field<int>("ID")
    where r2.Field<bool>("IsPending")
    select r1)
    .CopyToDataTable().AsDataView();

编辑2:更多详细信息

错误对话框:

我还注意到,当错误对话框弹出时,但在我单击“确定”之前,许多VisualStudio进程在任务管理器中看起来仍然正常
devenv
PerfWatson
VsHub
Microsoft.VsHub.Server.HttpHost
都仍在运行,并且工作集、句柄和线程统计数据都在波动
VBCSCompiler
MSBuild
仍在运行,但没有波动(不运行生成时通常会出现这种情况)

编辑:

VS2015更新1和升级到更新3后都出现问题

问题在于代码合同v1.9,尝试卸载并重新安装CC 1.9,但没有效果

可能的修复方法?

安装了CC v1.10-RC2,我已经工作了几分钟,没有VS崩溃

将在以下任一情况下进行后续跟进:

  • 更多的车祸发生,或者更好
  • 我一整天的工作都没有撞车
我认为这是Roslyn的问题对吗

我认为Roslyn不太可能是这个问题的直接原因。特别是因为这段数据

当我将VS2013与ccdocgen一起使用时,在构建时偶尔会出现错误,但它只会使ccdocgen崩溃,而不会使VS崩溃

Roslyn直到2015年才发货。在此之前,编译器是一段完全不同的代码(原生代码与托管代码)。虽然两个编译器可能都有相同的bug,但不太可能出现这种特定类型的问题

我认为这更可能是代码契约的问题。特别是Roslyn和本机编译器生成的IL序列与导致代码契约问题的IL序列相同


我将通知代码合同团队,看看他们的分析是什么

我也有同样的问题。我处理了递归调用。错误消失了。 因此,我建议您在任何递归函数的开头添加一些退出点。 或者试着注释递归调用, 验证这仅仅是因为递归调用导致堆栈溢出而发生的

如果不是递归调用,则可能是无限循环


祝你好运

谢谢。我经常在收到提示时向他们提交ccdocgen故障通知,因此希望那里有一些有用的日志数据。我是代码契约的维护者之一,但我看不出从v1.9到v1.10的更改如何会产生如此严重的影响。期待更多信息…嗨,谢尔盖。我仍然收到很多代码契约崩溃的消息,但这并没有摧毁VisualStudio。自从升级到VS2015以来,这些事情一直发生在我身上。我总是在收到提示时提交错误报告(只有当它没有崩溃时才会发生)。你能帮我查一下错误记录吗?
public DataView JoinedRecords =>
    query = Table1.AsEnumerable()
        .Join(Table2.AsEnumerable(),
            r1 => r1.Field<int>("ID"),
            r2 => r2.Field<int>("ID"),
            (r1, r2) => r1)
        .CopyToDataTable().AsDataView();
<entry>
    <record>563</record>
    <time>2016/06/29 16:00:08.841</time>
    <type>Error</type>
    <source>Extension Manager</source>
    <description>Extension will not be loaded because an extension with the same ID &apos;Microsoft.Windows.DevelopmentKit.Desktop&apos; is already loaded at C:\PROGRAM FILES (X86)\COMMON FILES\MICROSOFT\EXTENSIONMANAGER\EXTENSIONS\MICROSOFT\WINDOWS KITS\8.0\DESKTOP SDK\...</description>
    <path>C:\PROGRAM FILES (X86)\COMMON FILES\MICROSOFT\EXTENSIONMANAGER\EXTENSIONS\MICROSOFT\WINDOWS KITS\8.1\DESKTOP SDK\</path>
  </entry>
  <entry>
    <record>564</record>
    <time>2016/06/29 16:00:09.587</time>
    <type>Error</type>
    <source>Color Theme Service</source>
    <description>The color &apos;Popup&apos; in category &apos;de7b1121-99a4-4708-aedf-15f40c9b332f&apos; does not exist.     </description>
  </entry>