Как программно импортировать документацию из файла .xml в файл .cs? - PullRequest
0 голосов
/ 16 января 2019

У меня есть документация в XML-файле, которая выглядела так:

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>ClassLibrary2</name>
    </assembly>
    <members>
        <member name="T:ClassLibrary2.Class1">
            <summary>
            Class1 Dummy documentation
            </summary>
        </member>
        <member name="M:ClassLibrary2.Class1.Func1">
            <summary>
            Func1 Dummy documentation
            </summary>
        </member>
    </members>
</doc>

И я хочу импортировать документацию в файл .cs, который выглядел так:

namespace ClassLibrary2
{
    public class Class1
    {
        void Func1()
        {

        }
    }
}

Так что после импорта мой файл будет выглядеть так:

namespace ClassLibrary2
{
    /// <summary>
    /// Class1 Dummy documentation
    /// </summary>
    public class Class1
    {
        /// <summary>
        /// Func1 Dummy documentation
        /// </summary>
        void Func1()
        {

        }
    }
}

Как я могу сделать это программно?

Должен ли я использовать CodeDOM Или Visual Studio? Или Roslyn Или другой инструмент?

Любая помощь будет оценена,

Заранее спасибо.

1 Ответ

0 голосов
/ 16 января 2019

используйте CodeDom, Roslyn является платформой компилятора и не поможет вам в вашей проблеме.

  1. Загрузить CS в граф кодов
  2. Найдите методы / свойства на графике и добавьте CodeCommentStatement - см. https://docs.microsoft.com/en-us/dotnet/framework/reflection-and-codedom/how-to-create-an-xml-documentation-file-using-codedom
  3. Создайте новый исходный файл из графика (пример приведен в предоставленной мной ссылке)

EDIT: может быть, проще использовать библиотеку Microsoft.CodeAnalysis (добавьте пакет nuget Microsoft.CodeAnalysis.CSharp) из roslyn

var syntaxTree= CSharpSyntaxTree.ParseText(code);

//search for the methods and properties and add comments
// ** your code **
//

//getting the  new sourcecode
var root = (CompilationUnitSyntax)syntaxTree.GetRoot();
var mc= new ModelCollector();
mc.Visit(root);

string newCode = JsonConvert.SerializeObject(mc.models);

Вот метод создания новых комментариев: https://docs.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.csharp.syntaxfactory.comment?view=roslyn-dotnet

полный документ по библиотеке: https://docs.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.csharp?view=roslyn-dotnet

...