Я борюсь с поведенческими различиями между Visual Studio 2008 и 2010 отладчиком.
В 2008 году с подключенным отладчиком приведенный ниже код не остановится, чтобы показать исключение необработанное в установщике свойств I в объекте a.
(Параметр меню: «Отладка / Исключения», «Необработанный пользователь включен» и «Отключено»)
Блок try catch будет перехватывать targetInvocationException, и я могу спокойно его игнорировать (в особом случае, обратите внимание).
Однако в версии 2010 этот код с подключенным отладчиком будет прерываться при неудачной попытке установить значение I.
(что раздражает моих коллег, так как я не хочу, чтобы их отладочные программы внезапно прекращались из-за этого).
Насколько я понял, у меня есть возможность применить атрибут "System.Diagnostics.DebuggerNonUserCode" к классу или отключить параметр отладки "Включить только мой код".
Первый вариант на самом деле не является жизнеспособным, потому что в реальном мире генерируется класс A (с сотнями других)
И я не могу не заметить, что отключение опции «включить только мой код» повлияет на наши многочисленные, большие решения.
Может кто-нибудь объяснить мне, почему отключение опции «просто мой код» имеет значение здесь?
Заранее спасибо! ;)
p.s Я также попытался отключить все необработанные параметры отражения в Debug / Exceptions / Common Language Exception, 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
}
}
}