2016-11-14 7 views
2

Ich versuche, eine .NET Core Console App als Azure WebJob bereitzustellen. Alle Dateien usw. werden in die richtigen Verzeichnisse kopiert, aber meine Konsolen-App ist eine .dll-Ausgabe, daher muss dotnet.exe gestartet werden.Fehlende dotnet.exe in Azure WebJob

Ich habe eine run.cmd-Datei mit dem einzigen Befehl hinzugefügt: dotnet QbiSync.dll. Aber die Ausgabe der folgenden ist, kann es nicht finden dotnet.exe scheinen:

[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 

Öffnen Sie ein Konsolenfenster mit Kudu oder im Azure-Portal und Aufruf dotnet.exe beide funktioniert gut. Ich habe auch versucht, harte Links wie:

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

Aber sie auch Fehler geben wie:

[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 

Auch wenn die dotnet.exe tatsächlich dort befindet.

aktualisieren:

Möglicherweise verwandt ist, dass die Quelle @echo off zu Beginn des Skripts verwendet. Aber dies ist auch ein "Befehl", der nicht akzeptiert zu werden scheint.

[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, 

Verwendete Quellen:

+0

Was passiert, wenn Sie versuchen, Ihre run.cmd manuell über die Kudu-Konsole auszuführen? –

+0

Als einen schnellen Test habe ich versucht, eine kontinuierliche WebJob mit einer run.cmd, die nur 'dotnet.exe QbiSync.dll' (ohne die dll) zu erstellen. Es ist fehlgeschlagen mit 'Die auszuführende Anwendung existiert nicht: 'D: \ lokal \ Temp \ jobs \ continuous \ DotNetContJob \ tgq45gw1.kb2 \ QbiSync.dll'', was bedeutet, dass sie dotnet.exe erfolgreich gestartet hat und nur wegen der dll fehlgeschlagen ist ist nicht da. Können Sie versuchen, diesen Test zu isolieren? –

+0

@DavidEbbo Es startet erfolgreich und hat die erwartete Ausgabe über die Kudu-Konsole mit 'D: \ lokal \ Temp \ jobs \ continuous \ QbiSync \ jf0yv53s.i3c> run.cmd'. Ich werde deinen zweiten Kommentar in ein paar Minuten überprüfen. – Raymen

Antwort

7

Das Problem ist, dass Ihr run.cmd UTF-8 verwendet mit BOM (im Auftrag Zeichen), die in einigen Fällen bewirkt, dass das Skript Motor sich schlecht benehmen. Die Lösung besteht darin, die Stückliste nicht zu haben.

Es gibt eine Erwähnung davon auf dem Wiki (https://github.com/projectkudu/kudu/wiki/Web-Jobs), aber es ist leicht zu übersehen.

+0

Ich versuche einen Web-Job von einem HTTP-Client auszuführen. Die Datei ist eine ZIP-Datei. und enthält eine Java-Klasse und eine Bat-Datei, um diese Java-Klasse auszuführen. Dies läuft in Ordnung, wenn ich von POSTMAN mache. Aber wenn ich HTTP-Client verwende, bekomme ich den folgenden Fehler immer "'--- i-NPsGbTVUpaP0CeJxMQVrHoDHvaxo3' wird nicht als interner oder externer Befehl erkannt" - Bitte helfen – Jagaran

+0

@Jagaran, wenn es nur von einigen Clients passiert, ist es wahrscheinlich nicht verwandt . Bitte stellen Sie eine neue Frage –

+0

Nein, ich verwende HTTP-Client in Java, es ist das gleiche. Es funktioniert in CURL oder Laden von Web-Konsole. Mein Beispielcode unter – Jagaran