簡體   English   中英

在 linux 上使用 docfx.console nuget 包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM