¿Por qué el comportamiento de bloqueo de manejo de captura (TException) difiere bajo el depurador después de instalar Visual Studio 2008?

Considere la aplicación de consola a continuación, que presenta un método con un controlador de captura genérico que detecta excepciones de tipoTException.

Cuando esta aplicación de consola se compila con la configuración 'Depurar' y se ejecuta bajo el depurador de Visual Studio (es decir, a través de * .vshost.exe) esto falla, tanto en Visual Studio 2005 como en Visual Studio 2008.

Creo que este problema solo surgió después de instalar Visual Stuido 2008.

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine(Environment.Version);
        CatchAnException<TestException>();

        Console.ReadKey();
    }

    private static void CatchAnException<TException>()
        where TException : Exception
    {
        Console.WriteLine("Trying to catch a <{0}>...", typeof(TException).Name);
        try
        {
            throw new TestException();
        }
        catch (TException ex)
        {
            Console.WriteLine("*** PASS! ***");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Caught <{0}> in 'catch (Exception ex)' handler.", ex.GetType().Name);
            Console.WriteLine("*** FAIL! ***");
        }
        Console.WriteLine();
    }
}

internal class TestException : Exception
{
}

En las siguientes circunstancias, el código se comporta como se esperaba:

Si está construido con la configuración 'Release', tiene éxito. Si se ejecuta a través de * .exe directamente, en lugar de a través de Visual Studio (F5), tiene éxito. Si adjunta un depurador poniendoSystem.Diagnostics.Debugger.Launch(); en la línea 1 deMain() todavía tiene éxito.

Cuando la aplicación de consola se inicia desde Visual Studio (2005 o 2008) y, por lo tanto, se ejecuta en ConsoleApplication.vshost.exe, falla.

Aquí está mi salida para el caso de falla

2.0.50727.3068
Trying to catch a <TestException>...
*** FAIL! ***

Caught <TestException> in 'catch (Exception ex)' handler.
  Expected: <TestException>
    Actual: <TestException>
  Result of typeof(TException) == ex.GetType() is True

¿Qué está causando este peculiar fracaso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta