Używam tego kodu C# w Visual Studio w trybie debug:Dlaczego program Visual Studio nie wyświetla komunikatu wyjątku, gdy mój wyjątek wystąpi w konstruktorze statycznym?
public class MyHandlerFactory : IHttpHandlerFactory
{
private static Dictionary<string, bool> myDictionary = new Dictionary<string, bool>();
static MyHandlerFactory()
{
myDictionary.Add("someKey",true);
myDictionary.Add("someKey",true); // fails due to duplicate key
}
}
Outside of statycznym konstruktorze, kiedy się do linii z błędem Visual Studio podkreśla go i wyskakuje komunikat o wyjątku . Ale w konstruktorze statycznym nie otrzymuję takiej wiadomości. Przechodzę line-by-line, więc wiem, że idę do tej linii i nie dalej.
Dlaczego tak jest?
(nie mam pojęcia, czy fakt, że moja klasa implementuje spraw IHttpHandlerFactory, ale włączyła ją na wszelki wypadek).
To VS2005, .NET 2.0
Edit: Chcę tylko dodać, fakt, że jest to HttpHandler ma wydaje się mieć znaczenie. Jak wskazały odpowiedzi, domyślnym zachowaniem jest złamanie wyjątku TypeInitializationException, a nie wewnętrznego wyjątku. Przetestowałem inny przykład bez HttpHandler i zobaczyłem, że spowodowało to złamanie programu w pierwszym wierszu, który używał tej klasy. Ale w tym przypadku nie ma linii w moim kodzie do włamania, ponieważ klasa została wywołana tylko jako HttpHandler określony w moim pliku web.config. W związku z tym nie przerwał on wcale wyjątku.
Dzięki za odpowiedź. Jednak opcje widoczne w sekcji Debug> Exceptions ... to "Wyjątki C++", "Wyjątki środowiska wykonawczego języka wspólnego", "Managed Debugging Assistants", "Native Run-Time Checks" i "Win32 Exceptions". Czy ".NET Exceptions" jest pod jednym z tych? Nie mogłem go znaleźć. –
@Tim Goodman - OOPS! Miałem na myśli "Wyjątki środowiska wykonawczego języka wspólnego". Zaktualizuję moją odpowiedź. –
Ach tak, powodując przerwanie, gdy wyrzucane są wyjątki środowiska wykonawczego języka wspólnego, spowodowało złamanie wewnętrznego wyjątku. Dzięki. –