gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:01:23 28 4
gpt4 key购买 nike

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

最佳答案

But the question is, can I also use the nuget package on linux by changing how the docfx.exe command is run by the nuget package? Or is this only possible by actually fixing this in 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属性未在任何地方记录,但是您可以 see it in source code

关于c# - 在Linux上使用docfx.console nuget软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60060088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com