2

目前我有一个 Visual Studio 项目,我使用 docfx.console nuget 包来构建文档,一切正常,如预期的那样......在 Windows 上。现在的重点是我想制作一个mcr.microsoft.com/dotnet/core/sdk:3.1基于 linux 镜像的 docker 镜像。并在运行命令的这个 docker 镜像中编译:

dotnet publish -c Release -o out

给出以下错误

 > [build 9/9] RUN dotnet publish -c Release -o out:
#22 1.080 Microsoft (R) Build Engine version 16.0.450+ga8dc7f1d34 for .NET Core
#22 1.080 Copyright (C) Microsoft Corporation. All rights reserved.
#22 1.080
#22 2.852   Restore completed in 215.94 ms for /app/Documentation/Documentation.csproj.
#22 6.299   Documentation -> /app/Documentation/bin/Release/netcoreapp2.1/Documentation.dll
#22 6.402   /bin/sh: 2: /tmp/tmpbd72ebbe5e6b49c1b3244f1f50c8b57a.exec.cmd: /root/.nuget/packages/docfx.console/2.48.1/build/../tools/docfx.exe: Exec format error
#22 6.407 /root/.nuget/packages/docfx.console/2.48.1/build/docfx.console.targets(57,5): error MSB3073: The command ""/root/.nuget/packages/docfx.console/2.48.1/build/../tools/docfx.exe" "/app/Documentation/docfx.json" -o "" -l "log.txt" --logLevel "Verbose"" exited with code 2. [/app/Documentation/Documentation.csproj]

我已经做了一些刺激,我相信我的问题已经基本解决了。运行表明这是file 一个. 并且这些文件不应该在 linux 上使用,而是使用. 确实在运行:console.exePE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windowsshmono

mono docfx.exe "/app/Documentation/docfx.json" -o "" -l "log.txt" --logLevel "Verbose"

按预期构建文档。当然,此时我有很多解决方法来正确构建文档,只需从 csproj 中删除docfx.console并使用 docker 命令从命令行手动构建它。

但问题是,我是否也可以通过更改 nuget 包运行 docfx.exe 命令的方式来在 linux 上使用 nuget 包?或者这只能通过实际修复它来实现docfx.console

ps 以防万一,我使用的 docfx.console 版本是撰写本文时可用的最新版本,即 2.48.1

4

1 回答 1

1

但问题是,我是否也可以通过更改 nuget 包运行 docfx.exe 命令的方式来在 linux 上使用 nuget 包?或者这只能通过实际修复它来实现docfx.console

docfx创建使用 Mono运行的脚本docfx.exe,例如,像这样(假设docfx.exe位于 中/opt/docfx/docfx.exe):

echo '#!/bin/bash\nmono /opt/docfx/docfx.exe $@' > /usr/bin/docfx && chmod +x /usr/bin/docfx

然后,将带有路径的 MSBuild 参数传递BuildDocToolPath给该脚本,例如,如下所示:

dotnet publish -c Release -o out -p:BuildDocToolPath=/usr/bin/docfx

docfx.console将使用此路径来执行 DocFX。我认为该属性BuildDocToolPath没有在任何地方记录,但您可以在 source code 中看到它

于 2020-04-30T08:25:43.520 回答