在Linux上使用docfx.console nuget软件包

问题描述 投票:2回答:1

目前,我有一个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上运行console.exe表示这是一个PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows。这些类型的文件不应在Linux上使用sh执行,而应在mono上执行。并确实在运行:

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.s。万一重要,我使用的docfx.console版本是在撰写本文时可用的最新版本,即2.48.1

c# .net linux mono docfx
1个回答
0
投票

但是问题是,我是否可以通过更改nuget包运行docfx.exe命令的方式来在Linux上使用nuget包?还是只有通过在docfx.console中进行实际修复才能做到这一点?

例如,创建使用Mono运行docfx的脚本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属性没有记录在任何地方,但是您可以see it in source code

© www.soinside.com 2019 - 2024. All rights reserved.