C# 为什么安装VisualStudio2008后,在调试器下catch(TException)处理块行为会有所不同?
考虑下面的控制台应用程序,该应用程序具有一个带有泛型捕获处理程序的方法,该方法捕获类型为C# 为什么安装VisualStudio2008后,在调试器下catch(TException)处理块行为会有所不同?,c#,.net,visual-studio,visual-studio-2008,C#,.net,Visual Studio,Visual Studio 2008,考虑下面的控制台应用程序,该应用程序具有一个带有泛型捕获处理程序的方法,该方法捕获类型为TException的异常 当使用“调试”配置构建此控制台应用程序并在Visual Studio调试器下执行(即通过*.vshost.exe)时,在Visual Studio 2005和Visual Studio 2008中都会失败 我相信这个问题是在我安装Visual Stuido 2008之后才出现的 using System; class Program { static void Main(
TException
的异常
当使用“调试”配置构建此控制台应用程序并在Visual Studio调试器下执行(即通过*.vshost.exe)时,在Visual Studio 2005和Visual Studio 2008中都会失败
我相信这个问题是在我安装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
{
}
是什么导致了这种奇怪的失败?这确实很奇怪。我用VB.Net验证了这个问题也存在,所以这不是一个C#特有的问题。它需要由核心调试器团队确认,但看起来确实像一个bug
请在上提交一个bug,并将bug编号作为注释发布到我的OP,以便我可以确保它被发送到正确的团队 这是由CLR中的错误引起的已知问题。它已在CLR 4.0中修复(尚未发布)
感谢JaredPar在这方面的帮助。有关更多详细信息和链接,请参见其答案上的注释。这似乎已在“连接此处”中提出:显然已修复,但不清楚修复所在的CLR版本,或何时发布。@Daniel,这是CLR中的一个问题,将在CLR 4.0(以及相应的下一个Visual Studio版本)中修复。此外,使用64位CLR时不存在此错误。()嗯,这似乎是一个漫长的等待,等待一个错误修复回归。我现在唯一的选择是重新编写代码以避免以这种方式使用异常类型参数吗?@Daniel,不幸的是,是的,似乎是这样。注意,我不在CLR上工作,所以我对他们的bug修复过程的了解还不够完善。但是我不相信这个补丁会在CLR的下一个版本发布之前发布。
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