title author date CreateTime categories
docfx 做一个和微软一样的文档平台
lindexi
2018-08-10 19:16:51 +0800
2018-2-13 17:23:3 +0800
文档 软件 docfx

开发中,有一句话叫 最不喜欢的是写文档,最不喜欢的是看别人家代码没有文档。那么世界上文档写最 la 好 ji 的就是微软了,那么微软的api文档是如何做的?难道请了很多人去写文档?
实际上微软有工具用来生成 api 文档和教程。
我这里说的微软文档是:https://docs.microsoft.com/en-us/dotnet/articles/csharp/index 这个网站,不是以前的。

微软文档使用的工具是 docfx ,这是一个很好的工具。

本文将告诉大家如何使用这个工具做出和微软一样的文档

下载

第一步是下载,下载地址是 https://github.com/dotnet/docfx/releases 如果觉得github下载太慢,可以下载我上传的:http://download.csdn.net/detail/lindexi_gd/9839609

安装

下载之后需要解压到软件运行的文件夹,假如一般放软件的是在 E:\软件 ,就可以把他解压到这里。

假设解压到 E:\软件\docfx

在使用之前需要确定已经安装.NET CoreMicrosoft .NET Framework 4.6

环境变量

因为这个软件是命令行,所以希望在任何都可以使用,添加软件到环境变量

    setx PATH "%PATH%;E:\软件\docfx\"

创建文档文件

首先创建一个文件夹,用来放临时文件

这里使用的文件夹是D:\docfx_walkthrough

然后使用cmd进入这个文件夹。

简单的方法是地址输入就好,不需要打开cmd一点进入

在cmd输入命令 docfx init -q 后面的参数是表示快速,如果希望让他问你,你自己写设置,那么就不要加参数。

输入这个命令会生成docfx_project,这里就是新建的文件,可以看到 docfx.json

这个文件就是设置文件,可以打开看一下

生成文档

现在就可以进行生成文档了,因为默认就有一些文档。

我也觉得快点让你看到这个工具如何使用才是好的,不需要做太多步就可以看到自己弄出来的网站,这个感觉一般还是很好。

在cmd输入下面命令,因为这里的 cmd 没进入 docfx_project ,路径就是这样

    docfx docfx_project/docfx.json

可以看到创建了 _site ,这里就是网页,但是本地查看网页不太好,来使用自带的方法。

查看文档

这个工具可以让你从浏览器看到自己的文档,使用方法是在cmd输入代码

    docfx serve docfx_project/_site

打开 http://localhost:8080 就可以看到网站啦。

注意,如果你的 8080 端口被占用,可以自己定义打开的哪个

    docfx serve docfx_project/_site  -p 可以用端口

添加文档

现在让我们添加自己的文档

打开 articles 文件夹,添加自己的文档,这里添加

    win10 uwp MVVM入门.md

    win10-uwp-快捷键.md

打开 articles 的 toc.yml ,把文件添加进来

- name: win10 uwp MVVM入门
href: win10 uwp MVVM入门.md
- name: win10-uwp-快捷键
href: win10-uwp-快捷键.md

现在已经做好啦

重复 生成文档 和 查看文档 文档两步。

首先关闭 cmd 再打开,生成文档

    docfx.exe ./docfx.json

查看文档

    docfx serve _site -p 1560

打开 http://localhost:1560/ 就可以看到

可以看到添加文档需要自己写目录,这个不是很好,所以我就写了一个工具来生成。

添加代码文档

api文档是主要的,生成api文档需要安装vs2015以上。

首先进入工程,这里进入工程C:\程序\uwp\uwp\src\Framework\wpfMill

接着使用docfx metadata添加 *.sln

这里使用的是 csproj,两个都是支持的

    docfx metadata ./wpfMill.csproj

可以看到文件夹多了 _api

把他剪切到刚才的临时文件

这里是D:\docfx_walkthrough,现在的临时文件看起来是

把 _api 所有文件放到 api

打开 D:\docfx_walkthrough\toc.yml

- name: Articles
href: articles/
- name: Api Documentation
href: api/
homepage: api/index.md

删除得到

- name: Articles
href: articles/
- name: Api Documentation
href: api/

然后重复 生成文档 和 查看文档 文档两步

打开 代码文档 看到

左边和右边看起来还是很好

做自己的修改

我也觉得现在还没有那好,因为图标

默认的有 default iframe.html statictoc

导入微软的代码docfx template export 要哪个

   docfx template export default

可以看到多了 _exported_templates 文件

修改他的名字template 然后把 default 所有文件拿出来,放在这个文件里面。

打开docfx.json 修改默认使用的

        "template": [
"default"
]

修改之后

        "template": [
"template"
]

然后修改 template 的图标

现在看起来很好了,但是需要继续修改,可以打开 partials

这里就是所有可以修改的样式

下面来说一个例子:

打开 footer.tmpl.partial

    { {!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.} }

<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
{ { {_appFooter } } }
{ {^_appFooter} }<span>Copyright © 2015-2017 Microsoft<br>Generated by <strong>DocFX</strong></span>{ {/_appFooter} }
</div>
</div>
</footer>

把微软改为自己名字

    { {!Copyright (c) Microsoft. All rights reserved. Licensed under the MIT license. See LICENSE file in the project root for full license information.} }

<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
{ { {_appFooter} } }
{ {^_appFooter} }<span>Copyright © 2015-2017 lindexi<br>Generated by <strong>DocFX</strong></span>{ {/_appFooter} }
</div>
</div>
</footer>

重新生成文档,就可以看到,页面变化了

忽略不使用的api

经常有一些api是不希望显示在文档的。

可以忽略的方法有两个:第一个方法是在生成时添加忽略文件

    docfx.exe metadata -filter 忽略配置文件所在的路径

忽略文件的路径可以是相对的。

第二个方法是写在 docfx.json

添加一个属性 filter ,假如使用的忽略文件是 filterConfig.yml ,那么现在的文件就可以看到如下面代码

    {
"metadata": [
{
"src": [
{
"files": [
"src/**.csproj"
],
"exclude": [
"**/bin/**",
"**/obj/**"
]
}
],
"dest": "obj/api",
"filter": "filterConfig.yml"
}
]
}

接下来就是如何写 filterConfig.yml 。

这个文件可以包含包括的文件和不包括的,包括的权限比不包括大,默认是包括所有文件

包括的文件使用include 不包括使用 exclude ,看起来的文件是

  - include:
uidRegex: ^Microsoft\.DevDiv\.SpecialCase
- exclude:
uidRegex: ^Microsoft\.DevDiv

因为 uidRegex 是匹配,所以对于.需要加上\\

强大的ms还可以匹配是什么类型,提供的:

  • Namespace
  • Type
  • Class
  • Struct
  • Enum
  • Interface
  • Delegate
  • Member
  • Event
  • Field
  • Method
  • Property

如果要忽略命名空间是 lindexi.laji 的代码,请看下面代码

      - exclude:
uidRegex: ^lindexi\.laji
type: Namespace

原文:http://dotnet.github.io/docfx/index.html

继续在微软上开发

可以看到现在的 docfx 还不够好,于是我继续在微软做的上面开发。

我需要在一个文件夹包含多个项目的情况下,以及包含多个文件夹,里面包含多个项目的情况,可以解析出他们的文档和代码。

我想到的做法是在需要转换的文件夹添加一个文件,这个文件就是配置文件,表示这个文件夹内有哪些文件夹是代码,哪些是文档。对于代码的,需要有哪些是忽略的。

于是程序就获取配置的文件,从文件获取到存在哪些文件夹是需要进行转换的。

然后 遍历整个文件夹,获取文件夹里的配置,从而得到需要进行做的文件夹。

如果文件夹里的配置出错了,如找不到文件或其他的错误,那么报告为警告就好。

程序可以从所有的文件夹获取配置,如果一个文件夹存在配置文件:

docfx.json

那么读取配置文件里存在哪些配置文件,其中,文件的格式为:

Src:
- E:\12
Doc: E:\123123
DocfxFolder:
- E:\文件夹1
- E:\文件夹2
    class Docfx
{
/// <summary>
/// 代码所在的文件
/// </summary>
public List<string> Src
{
get; set;
} /// <summary>
/// 文档所在的文件夹
/// </summary>
public string Doc
{
get; set;
} /// <summary>
/// 包含需要进行文档的文件夹
/// <remarks><para>如我有两个文件夹在不同路径,那么可以在这里写这两个文件夹</para>
/// 或我把这个文件放在和本程序相同的路径,用这个文件来说明我需要转换的文件
/// </remarks>
/// </summary>
public List<string> DocfxFolder
{
get; set;
}
}

一般可以使用一个配置告诉程序,需要把几个项目的文档放在一个文件夹里,这样可以做搜索比较好。

于是这个配置就是只有 DocfxFolder 一个属性。一般不可以在使用 DocfxFolder 之后使用 Src 等属性。但是我这里没有做要求,只是判断如果存在 DocfxFolder 就不去读其他属性。

可以允许只有三个属性的一个。

2018-8-10-docfx-做一个和微软一样的文档平台的更多相关文章

  1. docfx 做一个和微软一样的文档平台

    开发中,有一句话叫 最不喜欢的是写文档,最不喜欢的是看别人家代码没有文档.那么世界上文档写最 la 好 ji 的就是微软了,那么微软的api文档是如何做的?难道请了很多人去写文档? 实际上微软有工具用 ...

  2. Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构

    分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...

  3. [原创博文] 用Python做统计分析 (Scipy.stats的文档)

    [转自] 用Python做统计分析 (Scipy.stats的文档) 对scipy.stats的详细介绍: 这个文档说了以下内容,对python如何做统计分析感兴趣的人可以看看,毕竟Python的库也 ...

  4. 本号讯 | 永不消失的协作“空间站”开课;微软推出微软云Azure文档网站

    8月29日,针对企业常面临的“协同办公”困难,开展以“还有这种操作?永不消失的协作'空间站'”为主题的协同办公培训课. 课程内容包含:在Office 365环境中,如何利用Teams与Groups等功 ...

  5. 使用ABAP编程实现对微软Office Word文档的操作

    SAP ABAP里提供了一个标准的类CL_DOCX_DOCUMENT,提供了本地以".docx"结尾的微软Office word文档的读和写操作. 本文介绍了ABAP类CL_DOC ...

  6. 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案

    第一次调用webapi出错如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// ...

  7. contents() 查找匹配元素内部所有的子节点(包括文本节点)。如果元素是一个iframe,则查找文档内容

    contents() V1.2概述 查找匹配元素内部所有的子节点(包括文本节点).如果元素是一个iframe,则查找文档内容   示例 描述:大理石平台检定规程 查找所有文本节点并加粗 HTML 代码 ...

  8. 成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

    作者: 马锐拉 我们的日常工作场景几乎离不开"云文档".目前,人们对于文档的需求再不仅仅是简单的记录,而扩展到办公协同.信息组织.知识分享等.在国内众多在线文档中,wolai 因为 ...

  9. (二)发布第一个WebService服务与DSWL文档解析

    1. 编写接口 package service; import javax.jws.WebService; /** * 第一个webservice服务, * @WebService注解表示这是一个we ...

随机推荐

  1. Laravel 迁移检查表是否存在

    Schema::hasTable('TableName'); //检查表释放存在 Schema::hasColumn('tableName', 'columeName'); //检查表是否存在某个字段 ...

  2. thinkphp 标签库

    内置的模板引擎除了支持普通变量的输出之外,更强大的地方在于标签库功能. 标签库类似于Java的Struts中的JSP标签库,每一个标签库是一个独立的标签库文件,标签库中的每一个标签完成某个功能,采用X ...

  3. ECMAScript 6中的Set和Map数据结构

    一.Set 基本用法: Set本身是一个构造函数,用来生成Set数据结构.Set函数可以接受一个数组作为参数用来初始化. const arr = new Set([2,2,3,3,4,4,5,8]); ...

  4. (转)Android--使用Canvas绘图

    转:http://www.cnblogs.com/plokmju/p/android_canvas.html 前言 除了使用已有的图片之外,Android应用常常需要在运行时根据场景动态生成2D图片, ...

  5. [VS2008] Debug版本程序发布后 由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题

    转自VC错误:http://www.vcerror.com/?p=59 问题描述: [VS2008] 版本程序发布后,运行程序弹出错误框: 由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序 ...

  6. 固定定位fixed,绝对定位absolute,相对定位relative;以及overflow

    固定定位position:fixed /*固定定位 1.定位属性值:fixed 2.在页面中不再占位(浮起来了) 3.一旦定位后,定位的布局方位 top.bottom.left.right都能参与布局 ...

  7. 计算图像数据集的RGB均值

    最近在跑代码的时候,需要用到RGB三个通道上的均值,如下图所示: 写了一个程序,如下: import os import cv2 import random import numpy as np #数 ...

  8. hudson通过ant自动编译、启动、停止java的jar

    set ANT_PATH=E:\soft\apache_ant\bine:cd E:\data\codex\server\trunk\serversvn up @echo.@echo.@echo &q ...

  9. spring:bean的作用范围和生命周期

    bean的作用范围调整: <!--bean的作用范围调整 bean标签的scope属性: 作用:用于指定bean的作用范围 取值:常用的就是单例的和多例的 singleton:单例的(默认值) ...

  10. asp.net去除HTML标签

    public string NoHTML(string Htmlstring) //替换HTML标记 { //删除脚本 Htmlstring = Regex.Replace(Htmlstring, @ ...