首页 > 解决方案 > 在docfx项目中提取元数据时出错

问题描述

尽管阅读了docfx 文档和许多 Github 问题,但我无法让我的 docfx 项目正常工作。

采取的步骤:

  1. 初始化根目录docfx init -q
  2. 从根目录构建docfx build(没有错误)
  3. 服务docfx "/user/docfx_project/docfx.json" --serve

堆栈跟踪:

Error:Error extracting metadata for /user/docfx_project/src/MyApp/MyApp.csproj,/user/docfx_project/src/MyApp.Tests/MyApp.Tests.csproj: System.NullReferenceException: Object reference not set to an instance of an object
  at Microsoft.DocAsCode.Metadata.ManagedReference.ExtractMetadataWorker.SaveAllMembersFromCacheAsync () [0x00380] in <0779a76130d64c11baa2c8c084cbfe7c>:0 
  at Microsoft.DocAsCode.Metadata.ManagedReference.ExtractMetadataWorker.ExtractMetadataAsync () [0x000c0] in <0779a76130d64c11baa2c8c084cbfe7c>:0 

环境:

项目结构:

docfx-project
 |
 +-- _site
 +-- api
 +-- apidoc
 +-- articles
 +-- docfx.json
 +-- images
 +-- index.md
 +-- obj
 +-- src
     |
     +-- MyApp
         |
         +-- MyApp.csproj
 +-- toc.yml

docfx.json:

{
  "metadata": [
    {
      "src": [
        {
          "files": [
            "src/**/**.csproj"
          ]
        }
      ],
      "dest": "api",
      "disableGitFeatures": false,
      "disableDefaultFilter": false
    }
  ],
  "build": {
    "content": [
      {
        "files": [
          "api/**.yml",
          "api/index.md"
        ]
      },
      {
        "files": [
          "articles/**.md",
          "articles/**/toc.yml",
          "toc.yml",
          "*.md"
        ]
      }
    ],
    "resource": [
      {
        "files": [
          "images/**"
        ]
      }
    ],
    "overwrite": [
      {
        "files": [
          "apidoc/**.md"
        ],
        "exclude": [
          "obj/**",
          "_site/**"
        ]
      }
    ],
    "dest": "_site",
    "globalMetadataFiles": [],
    "fileMetadataFiles": [],
    "template": [
      "default"
    ],
    "postProcessors": [],
    "markdownEngineName": "markdig",
    "noLangKeyword": false,
    "keepFileLink": false,
    "cleanupCacheHistory": false,
    "disableGitFeatures": false
  }
}

哈尔普。

标签: c#.net.net-coredocfxdotnetcorecli

解决方案


我不太清楚为什么会这样,但它在我的 CI 机器上的作用是export VSINSTALLDIR=——换句话说,VSINSTALLDIR在运行之前清除环境变量docfx metadata。我相信这会影响 docfx 使用的 msbuild(或至少一些 msbuild 文件)的版本。

这是过去对其他问题的修复——有人声称已经修复了一段时间,但同样的解决方法似乎也适用于这个问题……至少在我的 CI 机器上。


推荐阅读