When porting API docs into triple slash comments, classes that have #if def pragmas wrapped around their access modifiers lose the first line of the pragma.
Given the following example, The #if USEPUBLIC pragma line is dropped.
#if USEPUBLICpublic
#else
internal
#endif
classFoo{}Expected
/// <summary>Foo summary</summary>
#if USEPUBLICpublic
#else
internal
#endif
classFoo{}Actual
/// <summary>Foo summary</summary>public
#else
internal
#endif
classFoo{}This occurs with other types of pragmas as well. An example from Utf8Formatter.Guid.cs shows a scenario of an #endregion getting dropped.
Before
namespaceSystem.Buffers.Text{publicstaticpartialclassUtf8Formatter{
#region Constants
privateconstbyteOpenBrace=(byte)'{';privateconstbyteCloseBrace=(byte)'}';privateconstbyteOpenParen=(byte)'(';privateconstbyteCloseParen=(byte)')';privateconstbyteDash=(byte)'-';
#endregion Constants
/// <summary>/// Formats a Guid as a UTF8 string./// </summary>/// <param name="value">Value to format</param>/// <param name="destination">Buffer to write the UTF8-formatted value to</param>/// <param name="bytesWritten">Receives the length of the formatted text in bytes</param>/// <param name="format">The standard format to use</param>/// <returns>/// true for success. "bytesWritten" contains the length of the formatted text in bytes./// false if buffer was too short. Iteratively increase the size of the buffer and retry until it succeeds./// </returns>/// <remarks>/// Formats supported:/// D (default) nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn/// B {nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}/// P (nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn)/// N nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/// </remarks>/// <exceptions>/// <cref>System.FormatException</cref> if the format is not valid for this data type./// </exceptions>publicstaticboolTryFormat(Guidvalue,Span<byte>destination,outintbytesWritten,StandardFormatformat=default)After
namespaceSystem.Buffers.Text{/// <summary>Provides static methods to format common data types as Utf8 strings.</summary>publicstaticpartialclassUtf8Formatter{
#region Constants
privateconstbyteOpenBrace=(byte)'{';privateconstbyteCloseBrace=(byte)'}';privateconstbyteOpenParen=(byte)'(';privateconstbyteCloseParen=(byte)')';privateconstbyteDash=(byte)'-';/// <summary>Formats a <see cref="System.Guid" /> as a UTF8 string.</summary>/// <param name="value">The value to format.</param>/// <param name="destination">The buffer to write the UTF8-formatted value to.</param>/// <param name="bytesWritten">When the method returns, contains the length of the formatted text in bytes.</param>/// <param name="format">The standard format to use.</param>/// <returns><see langword="true" /> if the formatting operation succeeds; <see langword="false" /> if <paramref name="buffer" /> is too small.</returns>/// <remarks>Formats supported:/// |Format string|Result string|/// |--|--|/// |D (default)|nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn|/// |B|{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}|/// |P|(nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn)|/// |N|nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn|/// If the method fails, iteratively increase the size of the buffer and retry until it succeeds.</remarks>publicstaticboolTryFormat(Guidvalue,Span<byte>destination,outintbytesWritten,StandardFormatformat=default)
When porting API docs into triple slash comments, classes that have
#if defpragmas wrapped around their access modifiers lose the first line of the pragma.Given the following example, The
#if USEPUBLICpragma line is dropped.Expected
Actual
This occurs with other types of pragmas as well. An example from
Utf8Formatter.Guid.csshows a scenario of an#endregiongetting dropped.Before
After