1

我正在努力解决 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
        }
    }
}
4

0 回答 0