Как собрать все xml -документации из проектов в решении с docfx? - PullRequest
0 голосов
/ 01 марта 2020

У меня есть такая структура решения:

Solution
--Project.DAL
------bin
------obj
------Project.DAL.csproj
--Project.BLL
------bin
------obj
------Project.BLL.csproj
--Project.View
------bin
------obj
------Project.View.csproj
--Project.Documentaion
------_site
------another-files-of-docfx

Я пытался изменить реквизиты и значения docfx. json

    {
      "src": [
        {
          "files": [
            "Project.DAL.csproj",
            "Project.BLL.csproj",
            "Project.View.csproj"
          ],
          "src": "Project"
        }
      ],
      "dest": "api",
      "disableGitFeatures": false,
      "disableDefaultFilter": false
    }

В каждом проекте есть пакет nuget docfx. консоль . У меня есть документация в каждом проекте после создания решения. Я хочу собрать все xml -документации проектов в решении для папки Project.Documentation. Пожалуйста, скажите мне, это возможно или нет? Если да, можете ли вы мне помочь и скажите, что я сделал не так и где, пожалуйста?

1 Ответ

0 голосов
/ 01 марта 2020

Проверьте, работает ли следующее. Я мог бы использовать xml linq вместо регулярных выражений. :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string mainProject = @"c:\temp\myProject.csproj";
            string projectName = mainProject.Substring(mainProject.LastIndexOf("\\") + 1);
            string folder = mainProject.Substring(0, mainProject.LastIndexOf("\\") + 1);
            GetProjectsRecursive(folder, projectName, 0);
            Console.ReadLine();
        }
        static void GetProjectsRecursive(string folder, string project, int level)
        {
            string pattern = "<ProjectReference Include=\"(?'project'[^\"]+)";

            if (File.Exists(folder + project))
            {
                string contents = File.ReadAllText(folder + project);
                MatchCollection matches = Regex.Matches(contents, pattern, RegexOptions.Multiline);
                if (matches.Count > 0)
                {
                    foreach (Match match in matches)
                    {
                        string projectName = match.Groups["project"].Value;
                        string childProjectName = projectName.Substring(projectName.LastIndexOf("\\") + 1);
                        string childFolder = projectName.Substring(0, projectName.LastIndexOf("\\") + 1);
                        Console.WriteLine("{0}Project : '{1}', Refeference Project : '{2}'", new string(' ', level), project, projectName);

                        if (childFolder.StartsWith("..\\"))
                        {
                            childFolder = folder + childFolder;
                        }
                        GetProjectsRecursive(childFolder, childProjectName, level + 1);
                    }
                }
            }
            else
            {
                Console.WriteLine("Project Does Not Exist : '{0}'", folder + project);
            }
        }
    }
}
...