我正在努力解决 Visual Studio 2008 和 2010 调试器之间的行为差异。
在 2008 年,在附加调试器的情况下,下面的代码不会停止在对象 a 中的 I 的属性设置器处显示未处理的异常。(菜单选项:调试/异常,用户未处理打开,选项“抛出”关闭)
try catch 块将捕获 targetInvocationException,我可以安全地忽略它(在特殊情况下,请注意)。
但是,在 vs 2010 中,附加了调试器的这段代码将在尝试设置值 I 失败时中断。(这对我的同事来说很烦人,因为我不希望他们的调试运行因此而突然停止)。
据我所知,我可以选择在类上应用属性“System.Diagnostics.DebuggerNonUserCode”,或者禁用调试选项“仅启用我的代码”。
第一个选项实际上并不是一个可行的选项,因为在现实世界中,生成了 A 类(还有数百个其他选项)而且我无法监督禁用选项“仅启用我的代码”将对我们的多个选项产生影响,大解决方案。
有人可以向我解释为什么禁用仅我的代码选项会有所不同吗?
提前致谢!;)
ps我也试过在Debug/Exceptions/Common language runtime exceptions system.Reflections中禁用所有未处理的反射选项,但这似乎没有效果......
-- 示例代码 --
using System;
using System.Reflection;
class A
{
public int I { set { throw new Exception("Sorry, no can do"); } }
}
class Program
{
static void Main()
{
PropertyInfo targetMember = typeof(A).GetProperty("I");
var a = new A();
try
{
targetMember.SetValue(a, 1, null);
}
catch (TargetInvocationException)
{
// happy to ignore this, lalala
}
}
}