🐕

Azure Functions (in-process) を .NET8 化したときにFunctionホストが起動しない

2024/11/06に公開

古くから保守されている Azure Functions をバージョンアップするとき、in-process モデルのまま .NET8 化、Function v4 化をすることが多いと思います。
どこかのバージョンから、local.setting.json に設定を追記する必要が出てきて、それに気づかずに路頭に迷ったことがあったので、メモとして残しておきます。

なお、おそらく本記事のエラーはカスタムstartupを組んでいる場合に発生するものです。
(大体そこそこ大きなプロジェクトのfunctionsだとカスタムしていることが多いと思います。)

発生するエラー

ざっくりこのようなエラーが発生しました。

Error configuring services in an external startup class
Could not load file or assembly 'Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxx'. 指定されたファイルが見つかりません。.

解決方法

local.settings.jsonValues に次のようにプロパティを追加します。

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "xxxxxxxxxxxxxxxxxxxxxxxx",
        "Cron:Timer_HogehogeOperation": "0 */1 * * * *",
        "AzureWebJobs.Timer_HogehogeOperation.Disabled": "0"

        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "FUNCTIONS_INPROC_NET8_ENABLED": "1",
    }
}

追加したのは以下の2つのプロパティです。

{
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "FUNCTIONS_INPROC_NET8_ENABLED": "1",
}

これを追加すればOKだと思います。MS の wiki にも書いてあるのでよく読んでね(気づかねえべ

もう一つ注意で、すぐ直る気もしますが、local.settings.json に//コメントが書けなくなりました
もし記述してあったら消しましょう。

おまけ

以下に適当にマスクしたログを張り付けておきます。

Can't determine project language from files. Please use one of [--dotnet-isolated, --dotnet, --javascript, --typescript, --java, --python, --powershell, --custom]
Can't determine project language from files. Please use one of [--dotnet-isolated, --dotnet, --javascript, --typescript, --java, --python, --powershell, --custom]
Can't determine project language from files. Please use one of [--dotnet-isolated, --dotnet, --javascript, --typescript, --java, --python, --powershell, --custom]

Azure Functions Core Tools
Core Tools Version:       4.0.6518 Commit hash: N/A +xxxxxxxxxxxxxxxxxxxxxxxxxxx (64-bit)
Function Runtime Version: 4.35.4.23179

Can't determine project language from files. Please use one of [--dotnet-isolated, --dotnet, --javascript, --typescript, --java, --python, --powershell, --custom]
Can't determine project language from files. Please use one of [--dotnet-isolated, --dotnet, --javascript, --typescript, --java, --python, --powershell, --custom]
Can't determine project language from files. Please use one of [--dotnet-isolated, --dotnet, --javascript, --typescript, --java, --python, --powershell, --custom]
[2024-11-06T05:45:31.922Z] Error configuring services in an external startup class.
[2024-11-06T05:45:31.923Z] Error configuring services in an external startup class. XXXXX.NAMESPACE.XXXXX: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxx'. 指定されたファイルが見つかりません。.
[2024-11-06T05:45:31.979Z] A host error has occurred during startup operation 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.
[2024-11-06T05:45:31.980Z] Microsoft.Azure.WebJobs.Script: Error configuring services in an external startup class. XXXXX.NAMESPACE.XXXXX: Could not load file or assembly 'Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxx'. 指定されたファイルが見つかりません。.
Value cannot be null. (Parameter 'provider')
Press any key to continue....

Discussion