Azure WebJob 中缺少 dotnet.exe

Missing dotnet.exe in Azure WebJob

我正在尝试将 .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 门户中打开控制台 window 并调用 dotnet.exe 都可以正常工作。我也试过像这样的硬链接:

但他们也会给出如下错误:

[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。不过这也是一个"command"貌似不太接受的

[11/14/2016 12:37:57 > 4741da: INFO] D:\local\Temp\jobs\continuous\QbiSyncn44nly1.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,

使用的来源:

问题是您的 run.cmd 使用带有 BOM(字节顺序标记)的 UTF-8,这在某些情况下会导致脚本引擎运行异常。解决方法是没有 BOM。

wiki 上提到了这一点 (https://github.com/projectkudu/kudu/wiki/Web-Jobs),但很容易被忽略。

根据我的经验,在 Azure WebJob 的上下文中获取 .NET Core 控制台应用程序 运行ning 的最简单方法是创建一个独立的 .exe

您可以使用以下命令执行此操作:

dotnet publish -r win10-x64 -c Release

Note that the above command produces a different output than a Right-click > Publish action.

这将在控制台应用程序的 bin\Release\netcoreapp2.0 目录中创建一个名为 win10-x64 的文件夹。在 win10-x64 目录中是另一个名为 publish 的目录。

Simply compress the ...bin\Release\netcoreapp2.0\win10-x64\publish folder and upload as a new WebJob.

触发机制将检测控制台应用程序中的 .exe 和 运行 代码。