Comment attraper tous les non-traitée exceptions .net de l'assemblée (type de bibliothèque, pas de demande)
J'ai un assemblage contenant un certain nombre de classes. C'est une bibliothèque de classe type d'assemblage, pas une application windows forms. Il est également monothread.
Est-il un moyen de rattraper tous les non-traitée exceptions, de sorte que je peux me connecter?
OriginalL'auteur Jules | 2010-04-14
Vous devez vous connecter pour publier un commentaire.
À mon avis, de mettre une telle logique à l'intérieur de la bibliothèque n'est pas une bonne idée. Je pense qu'il devrait être d'application de la responsabilité de décider comment traiter les exceptions (à la fois traitées et non traitées). Cependant, vous pourriez regarder Domaine d'application.UnhandledException. Vous pouvez installer le gestionnaire de CurrentDomain et de faire quelque chose. Toutefois le faire de cette façon, vous êtes limitant les usages de la bibliothèque vous (par exemple, ce qui implique que la bibliothèque devrait être utilisé que dans un seul domaine). Aussi, vous recevrez des notifications pour toutes les exceptions non gérées, même totalement étranger à votre assemblée.
Je pense que la meilleure idée est de permettre aux développeurs qui utilisent votre bibliothèque pour faire leur travail traitant de toutes les exceptions non gérées (éventuellement avec UnhandledException installé par l'application).
Oui, je pense que laisser appelant à traiter avec votre exceptions est la bonne façon. Si l'appelant pour une raison de laisser ce non - c'est un interlocuteur de choix et de responsabilité. En fait, je ne suis pas sûr de ce que et pourquoi vous souhaitez vous connecter à partir de l'intérieur de vous-de la bibliothèque. Je pense que cela affecte de manière significative ce que vous devez faire. Qu'est-ce que l'utilisation de ce "journal"?
J'avais supposé que c'était à moi de journal d'erreurs dans le cas où un utilisateur de la bibliothèque n'a pas. Je suis autodidacte dans le .Monde Net, donc c'est tout nouveau pour moi.
Oui, vous pouvez consigner quelque chose. Mais quoi et comment le faire, cela dépend de la raison pour laquelle vous faites cela, et vos raisons ne sont pas claires. De toute façon, il semble que l'enregistrement doit être personnalisables par l'appelant. Au moins il devrait y avoir un moyen de le désactiver. Imaginez qu'une certaine application qui utilise votre bibliothèque est exécuté sans autorisations d'écriture sur le système de fichiers (ou de l'endroit où vous écrivez votre journal). Aimeriez-vous le plantage de l'application par votre journalisation dans de tels cas? Je ne le pense pas. Pour fournir une personnalisation vous pouvez utiliser certains de journalisation de la bibliothèque comme log4net.
OriginalL'auteur SergGr
Vous pouvez utiliser domaine d'application.UnhandledException d'attraper les exceptions non gérées à l'échelle mondiale:
http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
Ou utiliser try/catch pour chaque assemblée appel.
Le gestionnaire Global d'exception peut être utilisé dans votre propre application, qui fait référence à une autre assemblée. Il peut enregistrer tous les une exception non gérée dans l'ensemble de l'application, non seulement dans cette assemblée. Si ce n'est pas ce que vous voulez, utilisez la gestion des exceptions dans chaque assemblée appel.
Sans point d'entrée, il peut être préférable de traiter les exceptions à chaque appel, éviter le catch-all approche. C'est un défaut de conception dans le cadre de mon humble avis.
OriginalL'auteur Alex F