Visual Studio 2008 と 2010 デバッガーの動作の違いに苦労しています。
2008 年に、デバッガーがアタッチされている場合、以下のコードは、オブジェクト a の I のプロパティ セッターで未処理の例外を表示するために停止しませんでした。(メニューオプション: デバッグ/例外、ユーザー未処理オン、およびオプション「スロー」オフ)
try catch ブロックは targetInvocationException をキャッチするので、安全に無視することができます (特別なケースでは注意してください)。
ただし、vs 2010 では、デバッガーが接続されたこのコードは、値 I を設定しようとして失敗したときに壊れます (同僚にとっては、これが原因でデバッグの実行が突然停止することを望まないため、これは迷惑です)。
私が理解している限り、クラスに属性「System.Diagnostics.DebuggerNonUserCode」を適用するか、デバッグオプション「自分のコードのみを有効にする」を無効にするオプションがあります。
最初のオプションは、実際には実行可能なものではありません。現実の世界では、クラス A が (他にも何百もの) 生成されるためです。大きな解決策。
Just my code オプションを無効にすると違いが生じる理由を誰かに説明してもらえますか?
前もって感謝します!;)
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
}
}
}