Подтвердить что ты не робот

Автоматическое удаление документов в методах в С#/. 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"/>.

4b9b3361

Ответ 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 анализирует код для возможного исключения. Возможно, вы можете использовать некоторые из его функций.