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
都可以正常工作。我也试过像这样的硬链接:
"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
。不过这也是一个"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
和 运行 代码。
我正在尝试将 .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
都可以正常工作。我也试过像这样的硬链接:
"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
。不过这也是一个"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
和 运行 代码。