[英]using the docfx.console nuget package on linux
目前,我有一個 Visual Studio 項目,我使用 docfx.console nuget 包來構建文檔,並且一切正常,並且符合預期......在 Windows 上。 現在的重點是我想制作一個基於mcr.microsoft.com/dotnet/core/sdk:3.1
,該鏡像基於 linux 鏡像。 並在此 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]
我已經做了一些刺激,我相信我已經基本解決了這個問題。 在console.exe
上運行file
顯示這是一個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"
按預期構建文檔就好了。 在這一點上,我當然有一堆解決方法來正確構建文檔,只需從docfx.console
刪除 docfx.console 並使用 docker 命令從命令行手動構建它。
但問題是,我是否也可以通過更改 nuget 包運行 docfx.exe 命令的方式來在 linux 上使用 nuget 包? 或者這只能通過在docfx.console
實際修復它來docfx.console
?
ps 以防萬一,我使用的 docfx.console 版本是撰寫本文時可用的最新版本,即 2.48.1
但問題是,我是否也可以通過更改 nuget 包運行 docfx.exe 命令的方式來在 linux 上使用 nuget 包? 或者這只能通過在
docfx.console
實際修復它來docfx.console
?
創建使用 Mono 運行docfx.exe
腳本docfx
,例如,像這樣(假設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
沒有記錄在任何地方,但您可以在源代碼中看到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.