У меня есть приложение .Net 8 с изолированными функциями, в которое я добавил Application Insights. Вот мой код сборки хоста.
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices((context, services) =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build();
Когда строка services.AddApplicationInsightsTelemetryWorkerService();
выполняется, я получаю следующее исключение...
System.InvalidOperationException
HResult=0x80131509
Message=This service descriptor is keyed. Your service provider may not support keyed services.
Source=Microsoft.Extensions.DependencyInjection.Abstractions
StackTrace:
at Microsoft.Extensions.DependencyInjection.ServiceDescriptor.ThrowKeyedDescriptor() in Microsoft.Extensions.DependencyInjection\ServiceDescriptor.cs:line 483
Может ли кто-нибудь сказать мне, как я могу это исправить?
Можете ли вы поделиться своим .csproj
файлом?
Application Insights
по умолчанию настраивается локально для изолированной функции .NET 8.
Я могу без проблем запустить функцию с кодом по умолчанию и записать трассировку в Application Insights.
Мой .csproj
файл:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<ApplicationInsightsResourceId>/subscriptions/******/resourceGroups/******/providers/microsoft.insights/components/FunctionApp1</ApplicationInsightsResourceId>
<UserSecretsId>******</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include = "Microsoft.AspNetCore.App" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker" Version = "1.20.1" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Extensions.Http" Version = "3.1.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version = "1.2.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.Sdk" Version = "1.16.4" />
<PackageReference Include = "Microsoft.ApplicationInsights.WorkerService" Version = "2.21.0" />
<PackageReference Include = "Microsoft.Azure.Functions.Worker.ApplicationInsights" Version = "1.1.0" />
<PackageReference Include = "Microsoft.Extensions.Configuration.UserSecrets" Version = "8.0.0" />
</ItemGroup>
<ItemGroup>
<None Update = "host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update = "local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Using Include = "System.Threading.ExecutionContext" Alias = "ExecutionContext" />
</ItemGroup>
</Project>
Мой Program.cs
файл:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build();
Локальный выход:
Поиск транзакции:
Вы получаете ошибку локально?