目录
在本文中,我们将使用DocFx为Windows计算机中的Visual Studio C#解决方案生成文档。
DocFx是生成文档的命令行工具。
DocFx建立了一个结合两个来源的文档网站:
根据DocFx网站:
“DocFX可以从源代码(包括.NET,REST,JavaScript,Java,Python和TypeScript)以及原始Markdown文件中生成文档。”
并且:
“DocFX可以在Linux,macOS和Windows上运行。生成的静态网站可以部署到任何主机,例如GitHub Pages或Azure网站,而无需进行其他配置。”
DocFx是由Microsoft开发的一种开源工具,正如该公司所说,它是用于构建Microsoft文档网站的工具。
在本文中,我们将使用DocFx为Windows计算机中的Visual Studio C#解决方案生成文档。
下载和安装DocFx的最简单方法是使用Windows版Chocolatey软件包管理器。以管理员身份打开终端并执行以下操作:
choco install docfx -y
上面也将DocFx添加到PATH环境变量中。
打开Visual Studio并使用两个项目创建一个解决方案:一个Library项目和一个Windows Forms项目。
这是文件夹结构:
Solution
+ App
+ Lib
Solution.sln
对于每个项目,请转到属性|生成并选中XML文档文件复选框。
向项目中添加一些类并记录这些类。这是通过在类、方法和属性上添加三斜杠注释来完成的。
构建解决方案。
DocFx文档提供了两个演练。
这些演练说明,我们通过打开终端cd到solutionF文件夹init DocFx ,然后键入docfx init -q以初始化项目。
cd C:\Solution
docfx init -q
-q参数用于quiet。否则,它会遇到用户必须回答的一系列问题。
上面的代码在根解决方案文件夹中创建了一个docfx_project文件夹,并向其中添加了许多子文件夹和文件。其中最重要的文件docfx_project是docfx.json文件,它是DocFx的配置文件。
“docfx.json是docfx用于生成文档的配置文件”
生成的docfx.json中的所有文件夹引用都是错误的。并且根本不需要某些创建的文件夹。
因此,删除docfx_project文件夹。我们将使用自己的方式。
我们在根解决方案文件夹中需要一个子文件夹,用于DocFx文件和生成的文档。创建新文件夹并命名DocFx。
Solution
+ App
+ DocFx
+ Lib
Solution.sln
在DocFx文件夹中,创建一个空的docfx.json,使用Visual Studio打开它并添加以下内容:
{
"metadata": [
{
"src": [
{
"files": [ "**/**.csproj" ],
"src": ".."
}
],
"dest": "reference",
"disableGitFeatures": false,
"disableDefaultFilter": false,
"filter": "filterConfig.yml"
}
],
"build": {
"content": [
{
"files": [
"reference/**.yml",
"reference/index.md"
]
},
{
"files": [
"Concepts/toc.yml",
"Concepts/**.md",
"Concepts/**/toc.yml",
"toc.yml",
"*.md"
]
}
],
"resource": [
{
"files": [ "images/**" ]
}
],
"dest": "../docs",
"globalMetadataFiles": [],
"fileMetadataFiles": [],
"template": [ "default" ],
"postProcessors": [],
"markdownEngineName": "markdig",
"noLangKeyword": false,
"keepFileLink": false,
"cleanupCacheHistory": false,
"disableGitFeatures": false
}
}
该docfx.json包含两个部分:metadata和build。可能会有第三部分,pdf,但我们稍后再讨论这种冒险。
metadata部分对DocFx来说:
我们的metadata部分对DocFx来说:
该引用文件夹将由DocFx创建,如果不存在。
Build部分对DocFx来说:
我们的build部分对DocFx来说:
我们指示DocFx将生成的网站放置在根解决方案文件夹下的docs文件夹中。这将导致以下文件夹结构:
Solution
+ App
+ DocFx
+ docs
+ Lib
Solution.sln
您可以指示DocFx将生成的网站放置在您喜欢的任何文件夹中。
我们将其命名为docs文件夹,并将其放置在根解决方案文件夹下,因为GitHub Pages希望这样。
如果您使用github托管开源项目,并且想为您的项目提供一个不错的文档站点,则只需将文档站点放在根目录下的docs文件夹中并将该docs文件夹设置为发布源即可轻松实现用于GitHub Pages网站。
“过滤器配置文件为YAML格式。您可以通过提供过滤器配置文件并指定其路径来过滤掉不需要的API或属性。”
放置一个具有以下内容的filterConfig.yml:
apiRules:
- exclude:
# inherited members from Form
uidRegex: ^System\.Windows\.Forms\.Form\..*$
type: Member
- exclude:
# inherited members from Control
uidRegex: ^System\.Windows\.Forms\.Control\..*$
type: Member
- exclude:
# mentioning types from System.* namespace
uidRegex: ^System\..*$
type: Type
- exclude:
# mentioning types from Microsoft.* namespace
uidRegex: ^Microsoft\..*$
type: Type
注意:包含uidRegex和type条目的行应以两个空格开头。YAML语言使用空格缩进。
DocFx接受Markdown文件,其中包含由用户编写的概念性文档。使用TOC(目录)YAML文件组织那些Markdown文件。
在DocFx文件夹下,添加带有所需内容的index.md文件。
这是我的DocFx文件夹:
DocFx
docfx.json
index.md
.gitignore
filterConfig.yml
toc.yml
在DocFx文件夹中,创建一个Concepts子文件夹并添加以下文件夹和文件:
Concepts
+ Advanced
Abstract.md
Advanced.md
toc.yml
+ Easy
Abstract.md
Easy.md
toc.yml
Abstract.md
toc.yml
您可以将所需的任何内容放置在这些Markdown文件中。通常,这些文件包含有关所引用API的使用的概念性概述。
关于TOC文件,您可以查阅相关的DocFx文档,其中指出:
“DocFX支持处理Markdown文件或概念性文件,以及YAML或JSON格式的结构化数据模型或Metadata文件。除此之外,DocFX引入了一种使用目录文件或TOC文件来组织这些文件的方法,以便用户可以浏览元数据文件和概念文件。”
下面列出了使用的三个toc.yml文件:
1、Concepts/toc.yml:
- name: Easy
href: Easy/toc.yml
topicHref: Easy/Abstract.md
- name: Advanced
href: Advanced/toc.yml
topicHref: Advanced/Abstract.md
2、Concepts/Advanced/toc.yml:
- name: Advanced Overview Title
href: Advanced.md
3、Concepts/Easy/toc.yml:
- name: Easy Overview Title
href: Easy.md
docfx init -q命令在DocFx文件夹中添加一个.gitignore文件。创建具有以下内容的.gitignore文件,并将其放入DocFx文件夹中。
/**/DROP/
/**/TEMP/
/**/packages/
/**/bin/
/**/obj/
reference
为了生成网站,请打开终端,cd进入DocFx文件夹,然后键入:
docfx
网站已生成。
现在该预览该网站了。根据文档:
“如果未使用端口8080,则docfx将在http://localhost:8080下托管_site。如果正在使用8080,则可以使用docfx serve _site -p <port>更改由docfx使用的端口。”
要预览网站,请cd到docs:
cd ../docs
然后输入:
docfx serve
或者如果该端口8080是由另一个应用程序占用的,则只需使用另一个端口:
docfx serve -p 8081
现在,文档站点正在运行。
打开浏览器并导航到http://localhost:8080。
或者,如果将生成的站点的文件夹放在DocFx文件夹下,则可以只用一行就可以构建和运行该站点。
docfx --serve
您可以删除生成的文件夹,reference和docs。它们会在每个版本中重新创建。
就这样。您的文档站点将很快通过以下网址提供:
`https://USER_NAME.github.io/PROJECT_NAME/`
DocFx可以为整个生成的文档生成一个PDF文件。并非没有问题。
DocFx使用wkhtmltopdf工具生成PDF输出。
要下载并安装wkhtmltopdf,请以管理员身份打开终端并输入:
choco install wkhtmltopdf -y
为了生成令人垂涎的PDF文件,用户必须阅读并...理解DocFx提供的相关文档。
其中的一条信息可以在用户手册中找到,而另一条信息可以在第三个演练中找到。
经过大量的探索和试验,这是我的方法:
- name: Concepts
href: ../Concepts/toc.yml
- name: Reference
href: ../reference/toc.yml
"pdf": {
"content": [
{
"files": [ "PDF/toc.yml" ]
},
{
"files": [
"reference/**.yml",
"reference/index.md"
],
"exclude": [
"**/toc.yml",
"**/toc.md"
]
},
{
"files": [
"Concepts/**.md",
"Concepts/**/toc.yml",
"toc.yml",
"*.md"
],
"exclude": [
"**/bin/**",
"**/obj/**",
"PDF/**",
"**/toc.yml",
"**/toc.md"
]
}
],
"resource": [
{
"files": [ "images/**" ],
"exclude": [
"**/bin/**",
"**/obj/**",
"PDF/**"
]
}
],
"dest": "_pdf",
"outline": "NoOutline"
}
docfx pdf
这将生成一个没有轮廓的PDF文件,即PDF TOC。显然存在问题,并且轮廓未正确生成。因此,我使用"outline": "NoOutline"停用了。