タイトルの通りですが、.NET Core 2.2 では問題なくデプロイ出来ていた Azure Functions のプロジェクトが、.NET Core 3.0 のインストール後に失敗するケースが一部で発生するようです。
先に解決策を書いておきますが、Microsoft.NET.Sdk.Functions
を最新版にアップデートすれば直ります。
ビルドやデバッグ時には発生せず、デプロイ時のみエラーとなるので混乱します。
昔に作った Azure Functions プロジェクトでは、SDK が古いケースも多いと思うので Visual Studio 2019 16.3 や .NET Core SDK 3.0 をインストール後、デプロイに失敗するというパターンが割と発生しそうな予感です。
ちなみにエラーメッセージは SDK のバージョンが関係するものとは読み取りにくいです。
基本的には Azure Functions SDK は最新にしておいた方が良いです。昔はワイルドカードを使って自動で最新のバージョンが入るようになっていましたが、最近は固定化されるように戻ったので注意。
細かいバージョンについては面倒だったので調べていないですが、1.0.24 と 1.0.29 の 2 つを使ってエラーの有無を確認しておきました。結果は以下の通りです。
.NET Core 2.2 SDK | .NET Core 3.0 SDK | |
---|---|---|
Azure Functions SDK 1.0.24 | OK | NG |
Azure Functions SDK 1.0.29 | OK | OK |
.NET Core 3.0 SDK と古い Azure Functions SDK の組み合わせでのみ発生します。
テストには以下のようにテンプレート通りの csproj を作成し、SDK のバージョンだけ変更しました。どのバージョンから発生するかは特定していませんが、少なくとも 1.0.24 では再現します。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <AzureFunctionsVersion>v2</AzureFunctionsVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.24" /> </ItemGroup> <ItemGroup> <None Update="host.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> <None Update="local.settings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToPublishDirectory>Never</CopyToPublishDirectory> </None> </ItemGroup> </Project>
利用する SDK バージョンは global.json
を作成して、version
を 2.2.402 と 3.0.100 に変えて試しました。global.json
は dotnet new globaljson
を使うと簡単に作成できます。
{ "sdk": { "version": "3.0.100" } }
リポジトリに global.json
を含めて SDK バージョンを固定しておけば発生しにくいですが、古い SDK をアップデートした方が圧倒的に手っ取り早いのと正しい解決法となります。
今のところは Azure Pipelines の各 Agent には .NET Core 3.0 SDK がプリインストールされていないので問題は発生しませんが、次の VM Image 更新でインストールされそうなので、直前で焦らないようにさっさと SDK を最新にアップデートしておいた方が良いです。
Visual Studio や Azure Functions Core Tools を使ってプロジェクトを作成する場合は、古い Core Tools がインストールされている場合は古い SDK を使ったテンプレートが使われるのも注意です。
Visual Studio の場合は自動的にプロジェクト作成時やデバッグ実行時に最新の Core Tools をインストールする仕組みになっていますが、稀に古いバージョンがインストールされる現象も発生したことがあるので SDK バージョンには気を付けましょう。