31 votes

exceptions de document automatique sur les méthodes en C # /. NET

J'aimerais que certains outil, de préférence un qui se branche sur VS 2008/2010, qui passera par mes méthodes et ajouter des commentaires XML sur les exceptions possibles qu'ils peuvent lancer. Je ne veux pas l' <summary> ou d'autres balises XML à générer pour moi parce que je vais remplir ces moi-même, mais ce serait bien si même sur private/protected méthodes, je pouvais voir les exceptions susceptibles d'être levées. Sinon je suis aller à travers les méthodes et planant sur tous les appels de méthode à l'intérieur d'eux pour voir la liste des exceptions, puis la mise à jour de cette méthode en <exception liste de les inclure. Peut-être un VS macro pourrait faire cela?

À partir de ceci:

private static string getConfigFilePath()
{
    return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}

Pour cela:

/// <exception cref="System.ArgumentException"/>
/// <exception cref="System.ArgumentNullException"/>
/// <exception cref="System.IO.IOException"/>
/// <exception cref="System.IO.DirectoryNotFoundException"/>
/// <exception cref="System.Security.SecurityException"/>
private static string getConfigFilePath()
{
    return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}

Mise à jour: il semble que l'outil aurait à passer par les méthodes de manière récursive, par exemple, method1 appels method2 qui appelle method3 qui est documenté comme jeter NullReferenceException, de sorte que les deux method2 et method1 sont documentés par l'outil de aussi jeter NullReferenceException. L'outil serait également nécessaire afin d'éliminer les doublons, comme si deux appels à l'intérieur d'une méthode sont documentées comme jeter DirectoryNotFoundException, la méthode serait seulement de liste <exception cref="System.IO.DirectoryNotFoundException"/> une fois.

9voto

Adam Robinson Points 88472

La longue et la courte réponse est que ce n'est pas possible. Contrairement à Java, aucun de la .NET languages exiger que les fonctions de rapport, une liste d'exceptions qui peuvent être levées (ce qui signifie que vous avez à les attraper ou signaler des exceptions qui pourraient être jeté sur les fonctions qu'elle appelle). De ce fait, il n'y a pas de méthode générique permettant de déterminer une liste exhaustive de tous les une exception qu'une fonction pourrait lancer (je suis en utilisant le mot-là pour couvrir tout ce qui est écrit comme une fonction, y compris les opérateurs, constructeurs, etc.) parce que vous n'avez aucune garantie que les exceptions qui pourraient être levées par ce qu'une fonction peut appeler.

Si vous êtes prêt à aller dans limitée, alors il est concevable que vous pourriez écrire quelque chose qui pourrait scan MSDN pour l'article approprié pour une situation donnée .NET appel de la bibliothèque et de l'utilisation de la liste des exceptions (le cas échéant) de manière récursive établir une liste de ce que pourrait être levée. Ce ne serait pas, cependant, de toutes les bibliothèques tierces ou d'attraper toutes les exceptions levées par le moteur d'exécution (OutOfMemoryException, StackOverflowException, NullReferenceException [sauf si vous voulez prendre une étape supplémentaire et votre analyse d'exception également de déterminer si il y a possibilité d'une référence null, mais, là aussi, il semble impossible de le faire dans un complètement sens générique]).

Je suis sûr que cela a été couvert d'une fois ou deux par l'équipe C# (je serais surpris si Eric Lippert n'a pas déjà répondu à une question au sujet de ce sur de faire), mais je suis à peu près certain qu'il se résumait à ceci: même si ce type de système est utile et précieux pour certaines personnes, mandat de son utilisation (et vous forçant soit à rapporter ou à attraper tous éventuellement les exceptions lancées) conduit à beaucoup d' try { ... } catch (Exception ex) { ... } blocs afin d'éviter le ménage, et de couverture, le silence, les captures sont bien pire (à mon humble avis) qu'un non déclarée exception.

2voto

Giorgi Points 15760

Vous pouvez réaliser une partie de vos besoins en utilisant AtomineerUtils qui a un support pour la documentation des exceptions.

Vous pouvez également utiliser GhostDoc, Resharper et de l'Agent Johnson Plugin pour générer des exceptions. Voir la question suivante: La façon de documenter les exceptions lancées en c#/.net

1voto

Warren Points 2273

Exception Chasseur de RedGate logiciel vous à mi-chemin là. Il peut faire une analyse statique de votre code et de vous montrer quelles sont les exceptions seront jetés par quelles lignes de code, y compris .NET Framework appels. Il n'est pas écrire la documentation XML pour vous.

Mais, je dois dire, vous devez être réaliste quant à l'utilité d'un tel outil serait... il y a un certain nombre d'exceptions qui peuvent se produire en raison de la très rare que les circonstances, telles que l' System.OutOfMemoryException et System.ExecutionEngineException, ou suite à une erreur du développeur, comme System.NotImplementedException. Techniquement, ce sont tous les possibles, mais de façon réaliste, en essayant de document de la plupart d'entre eux pour chaque méthode n'est pas utile de votre temps... vous aimerais jusqu'à la fin avec des centaines de lignes de commentaire pour pratiquement chaque méthode dans votre application.

0voto

Daniel Brückner Points 36242

RedGate Exception Hunter analyse le code pour détecter d'éventuelles exceptions. Vous pourriez peut-être utiliser certaines de ses fonctionnalités.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X