首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux上使用docfx.console nuget包

在linux上使用docfx.console nuget包
EN

Stack Overflow用户
提问于 2020-02-04 15:00:11
回答 1查看 1.3K关注 0票数 2

目前,我有一个visual项目,我使用docfx.console nuget包来构建文档,并且一切都很好,正如预期的那样.在窗户上。重点是,现在我想要基于mcr.microsoft.com/dotnet/core/sdk:3.1制作一个码头映像,它是基于一个linux映像的。并在这个docker映像中编译运行以下命令:

代码语言:javascript
复制
dotnet publish -c Release -o out

给出以下错误

代码语言:javascript
复制
 > [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。这类文件不应该使用sh在linux上执行,而应该使用mono来执行。而且确实是在奔跑:

代码语言:javascript
复制
mono docfx.exe "/app/Documentation/docfx.json" -o "" -l "log.txt" --logLevel "Verbose"

像预期的那样构建文档。当然,在这一点上,我有很多解决办法来正确地构建文档,只需从csproj中删除docfx.console,并使用docker命令从命令行手动构建它。

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

附注:如果重要的话,我正在使用的docfx.console版本是在编写本报告时可用的最新版本,即2.48.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 08:25:43

但是问题是,我也可以通过改变nuget包运行docfx.exe命令的方式来使用linux上的nuget包吗?或者,只有在docfx.console中实际修复这个问题,才有可能做到这一点?

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

代码语言:javascript
复制
echo '#!/bin/bash\nmono /opt/docfx/docfx.exe $@' > /usr/bin/docfx && chmod +x /usr/bin/docfx

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

代码语言:javascript
复制
dotnet publish -c Release -o out -p:BuildDocToolPath=/usr/bin/docfx

docfx.console将使用此路径执行DocFX。我认为属性BuildDocToolPath在任何地方都没有文档,但是您可以在源代码中看到它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60060088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档