我希望能够在使用Roslyn解析C#源代码时阅读XML文档注释。
/// <summary>
/// Documentation...
/// </summary>
我试着在ParseOptions中设置ParseDocumentationComments,但似乎没有效果?
var parseOptions = ParseOptions.Default.WithParseDocumentationComments(true);
SyntaxTree unit = SyntaxTree.ParseFile(file, parseOptions);
发布于 2013-04-02 23:52:37
您需要执行以下任一操作:
Compilation
的语法的LeadingTrivia
,找到包含XML doc注释的Symbol
并对其使用GetDocumentationComment()
方法。一个完整的例子:
using Roslyn.Compilers.CSharp;
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var tree = SyntaxTree.ParseText(@"
/// <summary>This is an xml doc comment</summary>
class C
{
}");
var classNode = (ClassDeclarationSyntax)tree.GetRoot().Members.First();
var trivia = classNode.GetLeadingTrivia().Single(t => t.Kind == SyntaxKind.DocumentationCommentTrivia);
var xml = trivia.GetStructure();
Console.WriteLine(xml);
var compilation = Compilation.Create("test", syntaxTrees: new[] { tree });
var classSymbol = compilation.GlobalNamespace.GetTypeMembers("C").Single();
var docComment = classSymbol.GetDocumentationComment();
Console.WriteLine(docComment.SummaryTextOpt);
}
}
发布于 2017-07-12 22:29:57
只是为了更新Kevin Pilch answer above
添加Microsoft.CodeAnalysis.CSharp
使用系统;使用System.Linq;使用Microsoft.CodeAnalysis.CSharp;使用Microsoft.CodeAnalysis.CSharp.Syntax;类程序{ static void Main(string[] args) { var tree = CSharpSyntaxTree.ParseText(@“/ This is an xml doc comment class C{ }");var root = (CompilationUnitSyntax) tree.GetRoot();var classNode = (ClassDeclarationSyntax) (root.Members.First());var trivias = classNode.GetLeadingTrivia();var xmlCommentTrivia = trivias.FirstOrDefault(t => t.Kind() == var xml = xmlCommentTrivia.GetStructure();Console.WriteLine(xml);var xmlCommentTrivia=CSharpCompilation.Create(“syntaxTrees”,new[] {=>});var classSymbol =test var docComment = classSymbol.GetDocumentationCommentXml();Console.WriteLine(docComment);} }
发布于 2017-12-06 21:33:03
更新:
FirstOrDefault
方法不再可用。所以改用enumerator
吧。
更新代码:
using System;
using System.Linq;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
class Program
{
static void Main(string[] args)
{
var tree = CSharpSyntaxTree.ParseText(@"
/// <summary> This is an xml doc comment </summary>
class C
{
}");
var root = (CompilationUnitSyntax) tree.GetRoot();
var classNode = (ClassDeclarationSyntax) (root.Members.First());
var trivias = classNode.GetLeadingTrivia();
var enumerator = trivias.GetEnumerator();
while (enumerator.MoveNext())
{
var trivia = enumerator.Current;
if(trivia.Kind().Equals(SyntaxKind.SingleLineDocumentationCommentTrivia))
{
var xml = trivia.GetStructure();
Console.WriteLine(xml);
}
}
}
}
https://stackoverflow.com/questions/15763827
复制相似问题