Автоматическое удаление документов в методах в С#/. NET
Мне нужен какой-нибудь инструмент, желательно тот, который подключается к VS 2008/2010, который будет проходить через мои методы и добавлять комментарии XML о возможных исключениях, которые они могут бросить. Я не хочу, чтобы теги <summary>
или другие теги XML были созданы для меня, потому что я сам их заполню, но было бы неплохо, если бы даже в методах private
/protected
я мог видеть, какие исключения могут быть выброшены. В противном случае я обнаруживаю, что просматриваю методы и нахожусь во всех вызовах методов внутри них, чтобы увидеть список исключений, а затем обновить этот список методов <exception
, чтобы включить их. Может быть, макрос VS мог бы сделать это?
Из этого:
private static string getConfigFilePath()
{
return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}
К этому:
/// <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);
}
Обновление: кажется, что инструмент должен будет проходить через методы рекурсивно, например, метод1 вызывает метод method2, который вызывает метод3, который документируется как металирование NullReferenceException
, поэтому оба метода и метода1 документируются инструментом, также бросая NullReferenceException
. Инструменту также необходимо устранить дубликаты, например, если два вызова внутри метода документируются как металирование DirectoryNotFoundException
, метод будет перечислять только один раз <exception cref="System.IO.DirectoryNotFoundException"/>
.
Ответы
Ответ 1
Длинный и короткий ответ заключается в том, что это невозможно. В отличие от Java, ни один из языков .NET не требует, чтобы функции отображали список возможных исключений, которые могут быть выбраны (это означает, что вам либо нужно ловить, либо сообщить о любых исключениях, которые могут быть выбраны для функций, которые он вызывает). Из-за этого нет общего способа определить исчерпывающий список всех исключений, которые могла бы выполнять функция (я использую здесь функцию слова, чтобы покрыть все, что написано как функция, включая операторы, конструкторы и т.д.), Потому что у вас есть нет гарантии относительно исключений, которые могут быть вызваны тем, что может назвать данная функция.
Если вы готовы ограничиться, тогда можно предположить, что вы могли бы написать что-то, что могло бы сканировать MSDN для соответствующей статьи для данного вызова библиотеки .NET, и использовать список исключений там (если есть), чтобы рекурсивно установить список того, что можно было бы выбросить. Однако это не будет охватывать какие-либо сторонние библиотеки или улавливать любые исключения, создаваемые средой выполнения (OutOfMemoryException
, StackOverflowException
, NullReferenceException
[если вы не хотите сделать это еще дальше и проанализировать ваш анализ исключений если есть какая-либо возможность нулевой ссылки, но это тоже представляется невозможным в полностью общем смысле]).
Я уверен, что эта команда была частично или полностью закрыта командой С# (я был бы удивлен, если Эрик Липперт уже не ответил на вопрос об этом на SO), но я вполне уверен, что это сводилось к следующему: хотя такая система полезна и ценна для некоторых людей, требуя ее использования (и заставляя вас либо сообщать, либо улавливать все возможные исключения), привело к большому количеству блоков try { ... } catch (Exception ex) { ... }
, чтобы избежать домашнее хозяйство и одеяло, тихие уловы намного хуже (ИМХО), чем незарегистрированное исключение.
Ответ 2
Вы можете выполнить часть своих требований, используя AtomineerUtils, который поддерживает документирование исключений.
Вы также можете использовать GhostDoc, Resharper и Агент Плагин Johnson для генерации исключений. См. Следующий вопрос: Как документировать выброшенные исключения в С#/. Net
Ответ 3
"Охотник за исключениями" от программного обеспечения RedGate получит вас на полпути. Он может выполнять статический анализ вашего кода и показывать вам, какие исключения будут выбрасываться по строкам кода, включая вызовы .NET Framework. Он не будет писать XML-документацию для вас.
Но, я должен сказать, вам нужно быть реалистичным в отношении того, насколько полезным будет такой инструмент... существует ряд исключений, которые могут произойти в результате чрезвычайно необычных обстоятельств, таких как System.OutOfMemoryException
и System.ExecutionEngineException
или в результате ошибки программиста, например System.NotImplementedException
. Технически все это возможно, но реалистично, пытаясь документировать большинство из них для каждого метода, не стоит вашего времени... вы получите сотни строк комментариев практически для каждого метода в своем приложении.
Ответ 4
RedGate Exception Hunter анализирует код для возможного исключения. Возможно, вы можете использовать некоторые из его функций.