string code = @"namespace Foo
{
/// <summary>
/// This is Foo.Bar
/// </summary>
class Bar { }
}";
var tree = SyntaxFactory.ParseSyntaxTree(code);
tree = tree.WithRootAndOptions(tree.GetRoot().NormalizeWhitespace(), tree.Options);
var compilation = CSharpCompilation.Create(null)
.WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
.AddSyntaxTrees(tree)
.AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location));
var diagnostics = compilation.GetDiagnostics();
No errors.
System.ArgumentOutOfRangeException: Value must be positive.
Parameter name: count
at System.Text.StringBuilder.Append(String value, Int32 startIndex, Int32 count)
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.WriteSubStringLine(String message, Int32 start, Int32 length) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 1161
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.WriteFormattedSingleLineComment(String text) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 810
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.FormatComment(String substitutedText) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 659
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.TryProcessDocumentationCommentTriviaNodes(Symbol symbol, Boolean isPartialMethodDefinitionPart, ImmutableArray`1 docCommentNodes, Boolean reportParameterOrTypeParameterDiagnostics, String& withUnprocessedIncludes, Boolean& haveParseError, HashSet`1& documentedTypeParameters, HashSet`1& documentedParameters, ImmutableArray`1& includeElementNodes) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 448
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.DefaultVisit(Symbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 297
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.VisitNamedType(NamedTypeSymbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 223
at Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol.Accept(CSharpSymbolVisitor visitor) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\NamedTypeSymbol.cs:line 577
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.VisitNamespace(NamespaceSymbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 199
at Microsoft.CodeAnalysis.CSharp.Symbols.NamespaceSymbol.Accept(CSharpSymbolVisitor visitor) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\NamespaceSymbol.cs:line 143
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.VisitNamespace(NamespaceSymbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 199
at Microsoft.CodeAnalysis.CSharp.Symbols.NamespaceSymbol.Accept(CSharpSymbolVisitor visitor) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\NamespaceSymbol.cs:line 143
at Microsoft.CodeAnalysis.CSharp.CSharpSymbolVisitor.Visit(Symbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\SymbolVisitor.cs:line 15
at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.WriteDocumentationCommentXml(CSharpCompilation compilation, String assemblyName, Stream xmlDocStream, DiagnosticBag diagnostics, CancellationToken cancellationToken, SyntaxTree filterTree, Nullable`1 filterSpanWithinTree) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 102
Version Used: 3.7.0
Steps to Reproduce:
Run the following code:
Expected Behavior:
No errors.
Actual Behavior:
It seems the call to
NormalizeWhitespace()somehow turns the tree into a shape that is not supported byDocumentationCommentCompiler.The exception stack trace is: