首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Roslyn阅读XML文档注释

如何使用Roslyn阅读XML文档注释
EN

Stack Overflow用户
提问于 2013-04-02 20:12:38
回答 3查看 7.7K关注 0票数 24

我希望能够在使用Roslyn解析C#源代码时阅读XML文档注释。

代码语言:javascript
复制
/// <summary>
/// Documentation...
/// </summary>

我试着在ParseOptions中设置ParseDocumentationComments,但似乎没有效果?

代码语言:javascript
复制
var parseOptions = ParseOptions.Default.WithParseDocumentationComments(true);
SyntaxTree unit = SyntaxTree.ParseFile(file, parseOptions);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-02 23:52:37

您需要执行以下任一操作:

  1. 查看包含XML doc comments
  2. Construct a Compilation的语法的LeadingTrivia,找到包含XML doc注释的Symbol并对其使用GetDocumentationComment()方法。

一个完整的例子:

代码语言:javascript
复制
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);
    }
}
票数 33
EN

Stack Overflow用户

发布于 2017-07-12 22:29:57

只是为了更新Kevin Pilch answer above

  1. 通过nuget

添加Microsoft.CodeAnalysis.CSharp

  1. 代码将如下所示:

使用系统;使用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);} }

票数 7
EN

Stack Overflow用户

发布于 2017-12-06 21:33:03

更新:

FirstOrDefault方法不再可用。所以改用enumerator吧。

更新代码:

代码语言:javascript
复制
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);
           }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15763827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档