I have recently been doing some refactoring on my .NET 8 API, including to the Program.cs
and the Startup.cs
. It all works and runs fine on my local machine, but when I deploy it to Azure App Service, it fails to start with the following error:
2024-08-14T12:43:45.5279821Z Unhandled exception. System.TypeLoadException: Method 'AsPages' in type 'FuncAsyncPageable`1' from assembly 'Azure.Data.AppConfiguration, Version=1.2.0.0, Culture=neutral, PublicKeyToken=' does not have an implementation.
2024-08-14T12:43:45.5376689Z at Azure.Core.PageResponseEnumerator.CreateAsyncEnumerable[T](Func`2 pageFunc)
2024-08-14T12:43:45.5380123Z at Azure.Data.AppConfiguration.ConfigurationClient.GetConfigurationSettingsAsync(SettingSelector selector, CancellationToken cancellationToken)
2024-08-14T12:43:45.5383371Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.<>c__DisplayClass28_1.<<LoadSelectedKeyValues>b__1>d.MoveNext()
2024-08-14T12:43:45.5387348Z --- End of stack trace from previous location ---
2024-08-14T12:43:45.5391758Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.TracingUtils.CallWithRequestTracing(Boolean tracingEnabled, RequestType requestType, RequestTracingOptions requestTracingOptions, Func`1 clientCall)
2024-08-14T12:43:45.5395082Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.LoadSelectedKeyValues(ConfigurationClient client, CancellationToken cancellationToken)
2024-08-14T12:43:45.5398153Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.<>c__DisplayClass27_0.<<InitializeAsync>b__0>d.MoveNext()
2024-08-14T12:43:45.5401594Z --- End of stack trace from previous location ---
2024-08-14T12:43:45.5402968Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.<>c__DisplayClass40_0.<<ExecuteWithFailOverPolicyAsync>b__0>d.MoveNext()
2024-08-14T12:43:45.5404200Z --- End of stack trace from previous location ---
2024-08-14T12:43:45.5405373Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.ExecuteWithFailOverPolicyAsync[T](IEnumerable`1 clients, Func`2 funcToExecute, CancellationToken cancellationToken)
2024-08-14T12:43:45.5406588Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.ExecuteWithFailOverPolicyAsync(IEnumerable`1 clients, Func`2 funcToExecute, CancellationToken cancellationToken)
2024-08-14T12:43:45.5409488Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.InitializeAsync(Boolean ignoreFailures, IEnumerable`1 availableClients, CancellationToken cancellationToken)
2024-08-14T12:43:45.5752565Z at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationProvider.Load()
2024-08-14T12:43:45.5754273Z at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
2024-08-14T12:43:45.5755443Z at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
2024-08-14T12:43:45.5756531Z at Microsoft.Extensions.Hosting.HostBuilder.InitializeAppConfiguration()
2024-08-14T12:43:45.5757598Z at Microsoft.Extensions.Hosting.HostBuilder.Build()
2024-08-14T12:43:45.5758997Z at Program.Main(String[] args) in /home/runner/work/MyApp.Api/Program.cs:line 5
2024-08-14T12:43:48.6702399Z /opt/startup/startup.sh: line 18: 77 Aborted (core dumped) dotnet MyApp.Api.dll
I have the same setup on another API running in App Service which works fine, the only difference being that API does not use Azure Key Vault. I have tried adding the Azure.Data.AppConfiguration
package directly, but to no success. All the AppConfiguration packages are up to date. Does anyone have any ideas what the problem is?
Here are other bits of code that may be useful:
Program.cs
CreateHostBuilder(args)
.Build()
.Run();
static IHostBuilder CreateHostBuilder(string[] args) => Host
.CreateDefaultBuilder()
.ConfigureAzureAppConfiguration()
.ConfigureLogging(logging => logging.AddApplicationInsights())
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
Configuration.cs
public static class Configuration
{
public static IHostBuilder ConfigureAzureAppConfiguration(this IHostBuilder host) => host
.ConfigureAppConfiguration((context, builder) =>
{
IConfigurationRoot settings = builder.Build();
var connectionString = settings["AppConfig"];
if (connectionString is not null)
{
builder.AddAzureAppConfiguration(options => options
.ConfigureKeyVault(kv => kv.SetCredential(new DefaultAzureCredential()))
.Connect(connectionString)
);
}
});
}
Output from dotnet list package --include-transitive
Project 'MyApp.Api' has the following package references
[net8.0]:
Top-level Package Requested Resolved
> Azure.Identity 1.12.0 1.12.0
> FluentValidation 11.9.2 11.9.2
> FluentValidation.AspNetCore 11.3.0 11.3.0
> MediatR 12.0.1 12.0.1
> Microsoft.ApplicationInsights.AspNetCore 2.22.0 2.22.0
> Microsoft.AspNetCore.Authentication.JwtBearer 8.0.3 8.0.3
> Microsoft.AspNetCore.OpenApi 8.0.3 8.0.3
> Microsoft.Azure.AppConfiguration.AspNetCore 7.3.0 7.3.0
> Swashbuckle.AspNetCore 6.6.2 6.6.2
> Swashbuckle.AspNetCore.Annotations 6.6.2 6.6.2
> Swashbuckle.AspNetCore.Filters 8.0.2 8.0.2
Transitive Package Resolved
> Ardalis.GuardClauses 4.6.0
> AWSSDK.Core 3.7.100.14
> AWSSDK.SecurityToken 3.7.100.14
> Azure.Core 1.40.0
> Azure.Data.AppConfiguration 1.4.1
> Azure.Messaging.EventGrid 4.7.0
> Azure.Security.KeyVault.Secrets 4.6.0
> BCrypt.Net-Next 4.0.3
> DnsClient 1.7.0
> FluentValidation.DependencyInjectionExtensions 11.5.1
> Google.Apis 1.60.0
> Google.Apis.AndroidPublisher.v3 1.60.0.3052
> Google.Apis.Auth 1.60.0
> Google.Apis.Core 1.60.0
> MediatR.Contracts 2.0.1
> Microsoft.ApplicationInsights 2.22.0
> Microsoft.ApplicationInsights.DependencyCollector 2.22.0
> Microsoft.ApplicationInsights.EventCounterCollector 2.22.0
> Microsoft.ApplicationInsights.PerfCounterCollector 2.22.0
> Microsoft.ApplicationInsights.WindowsServer 2.22.0
> Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel 2.22.0
> Microsoft.AspNetCore.Authentication.Abstractions 2.2.0
> Microsoft.AspNetCore.Authentication.Core 2.2.0
> Microsoft.AspNetCore.Authorization 2.2.0
> Microsoft.AspNetCore.Authorization.Policy 2.2.0
> Microsoft.AspNetCore.Hosting 2.1.1
> Microsoft.AspNetCore.Hosting.Abstractions 2.2.0
> Microsoft.AspNetCore.Hosting.Server.Abstractions 2.2.0
> Microsoft.AspNetCore.Http 2.2.0
> Microsoft.AspNetCore.Http.Abstractions 2.2.0
> Microsoft.AspNetCore.Http.Extensions 2.2.0
> Microsoft.AspNetCore.Http.Features 2.2.0
> Microsoft.AspNetCore.Mvc.Abstractions 2.2.0
> Microsoft.AspNetCore.Mvc.Core 2.2.5
> Microsoft.AspNetCore.ResponseCaching.Abstractions 2.2.0
> Microsoft.AspNetCore.Routing 2.2.0
> Microsoft.AspNetCore.Routing.Abstractions 2.2.0
> Microsoft.AspNetCore.WebUtilities 2.2.0
> Microsoft.Bcl.AsyncInterfaces 1.1.1
> Microsoft.Extensions.ApiDescription.Server 6.0.5
> Microsoft.Extensions.Caching.Abstractions 1.0.0
> Microsoft.Extensions.Caching.Memory 1.0.0
> Microsoft.Extensions.Configuration 8.0.0
> Microsoft.Extensions.Configuration.Abstractions 8.0.0
> Microsoft.Extensions.Configuration.AzureAppConfiguration 7.3.0
> Microsoft.Extensions.Configuration.Binder 8.0.0
> Microsoft.Extensions.Configuration.EnvironmentVariables 2.1.1
> Microsoft.Extensions.Configuration.FileExtensions 3.1.0
> Microsoft.Extensions.Configuration.Json 3.1.0
> Microsoft.Extensions.DependencyInjection 8.0.0
> Microsoft.Extensions.DependencyInjection.Abstractions 8.0.1
> Microsoft.Extensions.DependencyModel 3.1.6
> Microsoft.Extensions.Diagnostics 8.0.0
> Microsoft.Extensions.Diagnostics.Abstractions 8.0.0
> Microsoft.Extensions.FileProviders.Abstractions 3.1.0
> Microsoft.Extensions.FileProviders.Physical 3.1.0
> Microsoft.Extensions.FileSystemGlobbing 3.1.0
> Microsoft.Extensions.Hosting.Abstractions 2.2.0
> Microsoft.Extensions.Http 8.0.0
> Microsoft.Extensions.Logging 8.0.0
> Microsoft.Extensions.Logging.Abstractions 8.0.1
> Microsoft.Extensions.Logging.ApplicationInsights 2.22.0
> Microsoft.Extensions.ObjectPool 2.2.0
> Microsoft.Extensions.Options 8.0.2
> Microsoft.Extensions.Options.ConfigurationExtensions 8.0.0
> Microsoft.Extensions.Primitives 8.0.0
> Microsoft.Identity.Client 4.61.3
> Microsoft.Identity.Client.Extensions.Msal 4.61.3
> Microsoft.IdentityModel.Abstractions 7.5.1
> Microsoft.IdentityModel.JsonWebTokens 7.5.1
> Microsoft.IdentityModel.Logging 7.5.1
> Microsoft.IdentityModel.Protocols 7.1.2
> Microsoft.IdentityModel.Protocols.OpenIdConnect 7.1.2
> Microsoft.IdentityModel.Tokens 7.5.1
> Microsoft.Net.Http.Headers 2.2.0
> Microsoft.NETCore.Platforms 1.0.1
> Microsoft.NETCore.Targets 1.0.1
> Microsoft.OpenApi 1.6.14
> Microsoft.Win32.Registry 5.0.0
> Microsoft.Win32.SystemEvents 6.0.0
> MongoDB.Bson 2.19.1
> MongoDB.Driver 2.19.1
> MongoDB.Driver.Core 2.19.1
> MongoDB.Libmongocrypt 1.7.0
> Newtonsoft.Json 13.0.2
> Refit 7.1.2
> Refit.HttpClientFactory 7.1.2
> Scrutor 3.3.0
> SendGrid 9.28.1
> SharpCompress 0.30.1
> Snappier 1.0.0
> starkbank-ecdsa 1.3.3
> Swashbuckle.AspNetCore.Filters.Abstractions 8.0.2
> Swashbuckle.AspNetCore.Swagger 6.6.2
> Swashbuckle.AspNetCore.SwaggerGen 6.6.2
> Swashbuckle.AspNetCore.SwaggerUI 6.6.2
> System.Buffers 4.5.1
> System.ClientModel 1.0.0
> System.Collections 4.0.11
> System.Configuration.ConfigurationManager 6.0.0
> System.Diagnostics.Debug 4.0.11
> System.Diagnostics.DiagnosticSource 8.0.0
> System.Diagnostics.PerformanceCounter 6.0.0
> System.Drawing.Common 6.0.0
> System.Globalization 4.0.11
> System.IdentityModel.Tokens.Jwt 7.5.1
> System.IO 4.1.0
> System.IO.FileSystem.AccessControl 4.7.0
> System.Linq 4.1.0
> System.Memory 4.5.4
> System.Memory.Data 1.0.2
> System.Net.Http.Json 8.0.0
> System.Numerics.Vectors 4.5.0
> System.Reflection 4.1.0
> System.Reflection.Metadata 1.6.0
> System.Reflection.Primitives 4.0.1
> System.Resources.ResourceManager 4.0.1
> System.Runtime 4.1.0
> System.Runtime.CompilerServices.Unsafe 5.0.0
> System.Runtime.Extensions 4.1.0
> System.Security.AccessControl 6.0.0
> System.Security.Cryptography.ProtectedData 6.0.0
> System.Security.Permissions 6.0.0
> System.Security.Principal.Windows 5.0.0
> System.Text.Encoding 4.0.11
> System.Text.Encodings.Web 8.0.0
> System.Text.Json 8.0.0
> System.Threading 4.0.11
> System.Threading.Tasks 4.0.11
> System.Threading.Tasks.Extensions 4.5.4
> System.Windows.Extensions 6.0.0
> ZstdSharp.Port 0.6.2