最近Azure Functions Core Toolsの挙動が何かおかしかったので見てみました。症状としては…
- Windows上でfuncコマンドで起動した後、止めてもポートが使われたままになってる
- コンソール出力がモノクロ(色がついてない)
- Visual Studioからのデバッグ実行は問題ない
みたいな感じです。
結論
In-ProcだとIn-Proc用のFunctions Core Toolsが使われて、それが残ってしまう。
なので最初からIn-Proc用のfuncコマンドを使えばよい。(通常 C:\Program Files\Microsoft\Azure Functions Core Tools\in-proc8 フォルダなどにある func.exe)
PowerShellなら Set-Aliasでfunc-inprocとか登録すると楽かも。
詳細
以下細かい話なので読み飛ばしてもOKです。
Isolatedモデルで開発してる場合は気にしなくてもOK。.NET以外も問題ないはず。
Windows上でIn-Procな.NETのFunctionsを開発していて、Visual Studio等からの実行ではなくコンソール上で直接 func start などで起動させている場合のみゴミプロセスが残ります。
直接func start などで起動するとこんな感じになります。
子プロセスのfunc.exeのほうがIn-Proc用です。
この状態でコンソール上のfuncコマンドを止めるとIn-Proc用プロセスが残ります。![]()
こっちのほうがポートをバインドしたり、本体なのでこのままVisual Studioを起動してデバッグ実行したりするとTCPポートが既にとられていて起動失敗したりします。
なお再度func startしたりするとうまくやってくれるようです。なのでだいたいのケースでは問題にはなりません。
とはいえコンソール上のログは本来色付きで出るのにネストしてるせいで出ない状態になったりします。
というわけで気になる人はIn-Proc用func.exeを最初から使いましょう。