Awesome-copilot csharp-docs
Ensure that C# types are documented with XML comments and follow best practices for documentation.
install
source · Clone the upstream repo
git clone https://github.com/github/awesome-copilot
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/github/awesome-copilot "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/csharp-docs" ~/.claude/skills/github-awesome-copilot-csharp-docs && rm -rf "$T"
manifest:
skills/csharp-docs/SKILL.mdsource content
C# Documentation Best Practices
- Public members should be documented with XML comments.
- It is encouraged to document internal members as well, especially if they are complex or not self-explanatory.
Guidance for all APIs
- Use
to provide a brief, one sentence, description of what the type or member does. Start the summary with a present-tense, third-person verb.<summary> - Use
for additional information, which can include implementation details, usage notes, or any other relevant context.<remarks> - Use
for language-specific keywords like<see langword>
,null
,true
,false
,int
, etc.bool - Use
for inline code snippets.<c> - Use
for usage examples on how to use the member.<example>- Use
for code blocks.<code>
tags should be placed within an<code>
tag. Add the language of the code example using the<example>
attribute, for example,language
.<code language="csharp">
- Use
- Use
to reference other types or members inline (in a sentence).<see cref> - Use
for standalone (not in a sentence) references to other types or members in the "See also" section of the online docs.<seealso> - Use
to inherit documentation from base classes or interfaces.<inheritdoc/>- Unless there is major behavior change, in which case you should document the differences.
Methods
- Use
to describe method parameters.<param>- The description should be a noun phrase that doesn't specify the data type.
- Begin with an introductory article.
- If the parameter is a flag enum, start the description with "A bitwise combination of the enumeration values that specifies...".
- If the parameter is a non-flag enum, start the description with "One of the enumeration values that specifies...".
- If the parameter is a Boolean, the wording should be of the form "
to ...; otherwise,<see langword="true" />
.".<see langword="false" /> - If the parameter is an "out" parameter, the wording should be of the form "When this method returns, contains .... This parameter is treated as uninitialized.".
- Use
to reference parameter names in documentation.<paramref> - Use
to describe type parameters in generic types or methods.<typeparam> - Use
to reference type parameters in documentation.<typeparamref> - Use
to describe what the method returns.<returns>- The description should be a noun phrase that doesn't specify the data type.
- Begin with an introductory article.
- If the return type is Boolean, the wording should be of the form "
if ...; otherwise,<see langword="true" />
.".<see langword="false" />
Constructors
- The summary wording should be "Initializes a new instance of the <Class> class [or struct].".
Properties
- The
should start with:<summary>- "Gets or sets..." for a read-write property.
- "Gets..." for a read-only property.
- "Gets [or sets] a value that indicates whether..." for properties that return a Boolean value.
- Use
to describe the value of the property.<value>- The description should be a noun phrase that doesn't specify the data type.
- If the property has a default value, add it in a separate sentence, for example, "The default is
".<see langword="false" /> - If the value type is Boolean, the wording should be of the form "
if ...; otherwise,<see langword="true" />
. The default is ...".<see langword="false" />
Exceptions
- Use
to document exceptions thrown by constructors, properties, indexers, methods, operators, and events.<exception cref> - Document all exceptions thrown directly by the member.
- For exceptions thrown by nested members, document only the exceptions users are most likely to encounter.
- The description of the exception describes the condition under which it's thrown.
- Omit "Thrown if ..." or "If ..." at the beginning of the sentence. Just state the condition directly, for example "An error occurred when accessing a Message Queuing API."