Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Конечная цель документации по API .NET заключается в том /// , чтобы xml-комментарии в исходном коде .NET были "источником истины". Для MSBuild ASP.NET Core и EF Core эта цель выполнена. Однако в настоящее время репозиторий dotnet-api-docs остается источником истины для некоторых пространств имен в справочнике по API .NET.
Эта проблема dotnet/runtime отслеживает усилия, чтобы вернуть документы .NET и сделать репозиторий dotnet/runtime источником истины. Наличие или отсутствие кнопки "Изменить" на странице часто указывает, что dotnet-api-docs репозиторий является источником истины. Если он отсутствует, то единственным источником правды, скорее всего, являются комментарии в исходном репозитории ///.
В этой статье приводятся советы по написанию хороших комментариев к документу в самом исходном коде.
Хорошие комментарии способствуют созданию хороших документов
Комментарии API .NET, начинающиеся с трех слэшей, преобразуются в общедоступную документацию на сайте learn.microsoft.com и отображаются в IntelliSense в интегрированной среде разработки. Примечания должны быть следующими:
- Полный — пустые записи в документации для методов, параметров, исключений и других элементов делают API менее поддержанными, временными или тривиальными.
- Правильно— читатели сканируют критически важные сведения и становятся разочарованы, когда ключевые сведения отсутствуют или некорректны.
- Читатели, приходящие на эту страницу из поиска, должны знать, как и когда использовать API, а также какое влияние это окажет на код.
- Отшлифованный — бедная или поспешная грамматика и орфография могут запутать читателя и сделать даже простые обращения неоднозначными; кроме того, плохое оформление указывает на низкую степень вложенности.
Лучшие практики
Используйте
crefвместоhrefссылки на другой тип или метод.Правильно:
<param name="configFile">An <see cref="XmlConfigResource" /> object.</param>Неправильный:
<param name="configFile">An <a href="https://learn.Microsoft.com/{path}/XmlConfigResource"></a> object.</param>При ссылке на параметры переключите имя параметра в
<paramref>тег, напримерThe offset in <paramref name="source" /> where the range begins..Если в комментарии документа есть несколько абзацев, разделите абзацы тегами
<para>.Примеры кода помещаются в теги
<code>, заключённые в теги<example>.Используйте
<seealso>, чтобы добавить ссылки на другие API-интерфейсы в автогенерированном разделе "См. также".
Теги документов XML
| Тег | Цель | Пример |
|---|---|---|
<altmember> |
Добавляет ссылку "См. также" в указанный API. | <altmember cref="System.Console.Out" /> |
<c> |
Форматирует указанный текст в виде кода в описании. | Gets the current version of the language compiler, in the form <c>Major.Minor.Revision.Build</c>. |
<code> |
Форматирует несколько строк в виде кода. | <code language="csharp">using(logger.BeginScope("Processing request from {Address}", address)) { }</code> |
<example> |
Добавляет пример кода в заголовок H2 "Example". | <example><code language="csharp">using(logger.BeginScope("Processing request from {Address}", address)) { }</code></example> |
<exception> |
Описывает исключение, что API может вызывать. | <exception cref="T:System.ArgumentException">No application identity is specified in <paramref name="identity" />.</exception> |
<include> |
Обратитесь к комментариям в другом файле, описывающим API в исходном коде. | <include file="../docs/AbsoluteLayout.xml" path="Type[@FullName='Microsoft.Maui.Controls.AbsoluteLayout']/Docs/*" />Пример .NET MAUI |
<inheritdoc> |
Наследуйте XML-комментарии от базовых классов, интерфейсов и аналогичных методов. | <inheritdoc /> |
<list> |
Создает маркированный или нумерованный список. | <list type="bullet"><item><description>Set the root path to the result.</description></item><item><description>Load host configuration.</description></item></list> |
<para> |
Разделяет абзацы. | |
<paramref> |
Ссылается на параметр метода. | Returns the activity with the specified <paramref name="id" />. |
<related> |
Добавляет ссылку "См. также" в указанную статью. | <related type="Article" href="/dotnet/framework/ado-net-overview">ADO.NET overview</related> |
<see cref> |
Ссылки на другой API. | Describes the behavior that caused a <see cref="Scroll" /> event. |
<see langword> |
Форматирует указанный текст в виде кода. | Gets the value of the <see langword="Accept-Ranges" /> header for an HTTP response. |
<seealso> |
Добавляет ссылку "См. также" в указанный API. | <seealso cref="T:System.Single" /> |
<typeparamref> |
Ссылается на параметр типа. | The <typeparamref name="THandler" /> is resolved from a scoped service provider. |
Дополнительные сведения см. в разделе "Рекомендуемые XML-теги для C# " и спецификации C#. Спецификация ECMAXML также имеет хорошую информацию, хотя имейте в виду, что существуют некоторые различия между ECMAXML и /// комментариями документации (например, целевые объекты cref полностью развернуты и имеют префиксы в ECMAXML).
Перекрестные ссылки
При использовании тега <see cref> для ссылки на другой API нет необходимости добавлять префикс в имя типа, например T: для типа или M: метода. На самом деле правило анализа кода CA1200 помечает комментарии кода, добавляющие префикс в имя типа в cref теге. Однако существует несколько исключений для этого правила:
- Если вы хотите сделать ссылку на общую форму метода с несколькими перегрузками, компилятор C# на данный момент этого не поддерживает. Решением для документов является префикс имени метода в
O:исходном коде (илиOverload:в ECMAXML) и подавление правила CA1200. Например:<altmember cref="O:System.Diagnostics.Process.Kill" />. - Если спрогнозировать API из текущего контекста, который включает в себя любую
usingдирективу, не удается. В этом случае используйте полное имя API с префиксом.
<see cref> При преобразовании тега в ECMAXML mdoc заменяет имя типа полным идентификатором DOCId API, который включает префикс.
Описания
Достоверные рекомендации по описанию каждого типа символов и его различных частей см. в документации по API .NET.
Пустые комментарии
Хорошо известный текст-заполнитель для пустых комментариев — это To be added.. Система сборки Learn распознает этот текст и удаляет его при преобразовании ECMAXML в HTML, оставляя пустое описание.
Отдельные файлы кода
Если пример кода является длинным, его можно поместить в отдельный файл в репозитории документов и связать с ним из исходного кода следующим образом:
/// <example>
/// <format type="text/markdown">
/// <]
/// ]]></format>
/// </example>
Дополнительные сведения о том, как подключить отдельные файлы кода, см. в этом обсуждении.
Атрибуты языка
Атрибуты языка для <code> тегов являются необязательными, но они вызывают форматирование кода с помощью цветового кодирования. Рассмотрим пример.
/// <example>
/// This sample shows the basic pattern for defining a typed client class.
/// <code language="csharp">
/// class ExampleClient
/// {
/// private readonly HttpClient _httpClient;
/// private readonly ILogger _logger;
///
/// // Typed clients can use constructor injection to access additional services.
/// public ExampleClient(HttpClient httpClient, ILogger<ExampleClient> logger)
/// {
/// _httpClient = httpClient;
/// _logger = logger;
/// }
/// }
/// </code>
/// </example>
Внутренние API
При документировании API, который не предназначен для использования потребителями, используйте формулировки, аналогичные приведённым ниже.
<summary>This type supports the .NET infrastructure and is not intended to be used directly from your code.</summary>