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