Dot-Net

Azure WebJob 中缺少 dotnet.exe

  • November 14, 2016

我正在嘗試將 .NET Core 控制台應用程序部署為 Azure WebJob。所有文件等都被複製到正確的目錄,但我的控制台應用程序的輸出是 .dll,因此需要dotnet.exe啟動。

我添加了一個帶有單個命令的 run.cmd 文件:dotnet QbiSync.dll. 但是輸出如下,好像找不到dotnet.exe:

[11/14/2016 13:15:29 > 4741da: SYS INFO] Run script 'run.cmd' with script host - 'WindowsScriptHost'
[11/14/2016 13:15:29 > 4741da: SYS INFO] Status changed to Running
[11/14/2016 13:15:29 > 4741da: INFO] 
[11/14/2016 13:15:29 > 4741da: INFO] D:\local\Temp\jobs\continuous\QbiSync\x4jkoxww.vy4>dotnet QbiSync.dll 
[11/14/2016 13:15:29 > 4741da: ERR ] 'dotnet' is not recognized as an internal or external command,
[11/14/2016 13:15:29 > 4741da: ERR ] operable program or batch file.
[11/14/2016 13:15:29 > 4741da: SYS ERR ] Job failed due to exit code 1
[11/14/2016 13:15:29 > 4741da: SYS INFO] Process went down, waiting for 60 seconds

使用 Kudu 或在 Azure 門戶中打開控制台視窗並呼叫dotnet.exe兩者都可以正常工作。我也嘗試過硬連結,例如:

  • "D:\Program Files (x86)\dotnet\dotnet.exe" QbiSync.dll
  • "\Program Files (x86)\dotnet\dotnet.exe" QbiSync.dll

但他們也會給出如下錯誤:

[11/14/2016 13:59:29 > 4741da: ERR ] The filename, directory name, or volume label syntax is incorrect.
[11/14/2016 13:59:29 > 4741da: INFO] D:\local\Temp\jobs\continuous\QbiSync\hzlkzj1q.0jt>"D:\Program Files (x86)\dotnet\dotnet.exe" QbiSync.dll 

即使 dotnet.exe 實際上位於那裡。

更新

可能與@echo off腳本開頭使用的源有關。但這也是一個似乎不被接受的“命令”。

[11/14/2016 12:37:57 > 4741da: INFO] D:\local\Temp\jobs\continuous\QbiSync\3n44nly1.ucq>@echo off 
[11/14/2016 12:37:57 > 4741da: INFO] 
[11/14/2016 12:37:57 > 4741da: ERR ] '@echo' is not recognized as an internal or external command,

使用的來源:

  • <https://blog.decayingcode.com/post/creating-.net-core-console-webjobs-on-an-asp.net-core-azure-webapp/>

問題是您run.cmd使用帶有BOM(字節順序標記)的 UTF-8,這在某些情況下會導致腳本引擎行為不端。解決方法是沒有 BOM。

wiki ( https://github.com/projectkudu/kudu/wiki/Web-Jobs )上提到了這一點,但很容易錯過。

引用自:https://stackoverflow.com/questions/40591418