缺少Azure WebJob中的dotnet.exe

时间:2016-11-14 14:44:48

标签: .net azure .net-core azure-webjobs

我正在尝试将.NET Core Console应用程序部署为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,

使用的来源:

2 个答案:

答案 0 :(得分:18)

问题是您的export function loginLookUp(credentials) { const request = axios.post(`${LOGINLOOKUP_URL}`, credentials).then(function (response) { return { type: LOGIN_SUCCESS, payload: true }; }) .catch(function (error) { return { type: LOGIN_FAIL, payload: false }; }); } 使用带有BOM的UTF-8(字节顺序标记),这在某些情况下会导致脚本引擎行为异常。修复是没有BOM。

在wiki(https://github.com/projectkudu/kudu/wiki/Web-Jobs)上提到了这一点,但是很容易错过。

答案 1 :(得分:1)

根据我的经验,在Azure WebJob的上下文中运行.NET Core Console应用程序的最简单方法是创建一个自包含的.exe

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

dotnet publish -r win10-x64 -c Release
  

注意以上命令产生的输出与Right-click > Publish操作不同。

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

  

只需压缩...bin\Release\netcoreapp2.0\win10-x64\publish文件夹并上传为新的WebJob。

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