“编辑并继续”处理方法体内的大多数类型的代码更改。但是,方法体外的大多数更改以及方法体内的小部分更改在调试期间不能应用。若要应用不受支持的更改,必须停止调试,重新开始修改后的代码。
在调试会话期间不能对 C# 代码应用下列更改:
对当前语句或任何其他活动语句的更改。
活动语句包括调用堆栈中的函数中为转至当前语句而调用过的任何语句。
当前语句在源窗口中以黄色背景标记。其他活动语句以阴影背景标记,并且是只读的。这些默认颜色可在**“选项”**对话框中更改。
对全局符号的更改,包括:
添加新类型。
在类型中添加方法。
更改类型的签名。
在类型中添加字段、事件或属性。
编辑匿名方法或任何包含匿名方法的方法。这些方法以阴影背景标记。
添加新的匿名方法。
添加、移除或更改特性。
添加、移除或更改 using 指令。
移除或更改局部变量。允许添加局部变量。
在活动语句前后添加 foreach、using 或 lock。
修改包含 yield return 或 yield break 语句的方法。
更改具有由匿名方法初始化的字段的构造函数。
不安全代码
对不安全代码的更改与对安全代码的更改有相同的限制,但它还包含一条附加的限制:
- “编辑并继续”不支持更改存在于包含 stackalloc 运算符的方法内的不安全代码。这仅仅适用于活动方法。当进行调试时,当前处于调用堆栈上的任何函数都是活动函数。
异常
" 编辑并继续支持。 catch, finally,的更改,并 try 在活动的方法进行阻止,有一些异常的块,如当前调用堆栈上的方法。
如果活动函数是调用堆栈中最近使用的函数,则在该函数中“编辑并继续”不支持:
添加 catch 或 finally请在活动语句周围的块。
添加嵌套级别大于六的嵌套异常处理程序。
如果活动函数不是调用堆栈中最近使用的函数,则在该函数中“编辑并继续”不支持:
添加 catch, finally 或 try在活动语句周围的块。
添加嵌套级别大于六的嵌套异常处理程序。
包含活动语句在 try中的更改的代码块。
不支持的方案
在以下调试方案中,“编辑并继续”不可用:
调试 LINQ 代码。有关更多信息,请参见 Edit and Continue Not Supported for LINQ。
混合模式(本机/托管)调试。
SQL 调试。
调试 Dr.Watson 转储。
在未选择“在未经处理的异常上展开调用堆栈”选项的情况下,在发生未经处理的异常之后编辑代码。
调试嵌入式运行时应用程序。
使用**“附加到”来调试应用程序,而不是通过选择“调试”菜单上的“启动”**来运行应用程序。
调试优化后的代码。
当目标为 64 位应用程序时,调试托管代码。如果希望使用“编辑并继续”,必须将目标平台设置为 x86(项目属性, 编译 选项, 高级编译器 设置。)
如果由于生成错误无法生成新版本的代码,则对旧版本的代码进行调试。