microsoft/semantic-kernel · critical · ConfigurationNotFoundException

Configuration key ' : ' not found

Error message

Configuration key '{section}:{key}' not found

What it means

In ConfigureTracing, when useApplicationInsights is true the code reads TestConfiguration.ApplicationInsights.ConnectionString. If the value is null or whitespace, it throws ConfigurationNotFoundException(section, key) — a custom exception whose message is formatted as 'Configuration key \'{section}:{key}\' not found'. This guards against starting an Azure Monitor trace exporter with no connection string, which would fail silently or crash deep in the exporter.

Solutions

  1. Set the Application Insights connection string: 'dotnet user-secrets set "ApplicationInsights:ConnectionString" "<your-connection-string>"'.
  2. Set the environment variable ApplicationInsights__ConnectionString (double underscore for section separator).
  3. If you don't have Application Insights, call ConfigureTracing(useApplicationInsights: false) to use the console exporter instead.
  4. Verify the connection string is copied from the Azure Portal (Application Insights resource > Overview > Connection String), not the instrumentation key.

Example fix

// before
if (string.IsNullOrWhiteSpace(connectionString))
{
    throw new ConfigurationNotFoundException(
        nameof(TestConfiguration.ApplicationInsights),
        nameof(TestConfiguration.ApplicationInsights.ConnectionString));
}

// after — fall back to console exporter with a warning
if (string.IsNullOrWhiteSpace(connectionString))
{
    Console.WriteLine("Application Insights connection string not configured; falling back to console exporter.");
    tracerProviderBuilder.AddConsoleExporter();
}
else
{
    tracerProviderBuilder.AddAzureMonitorTraceExporter(o => o.ConnectionString = connectionString);
}
Defensive patterns

Strategy: validation

Validate before calling

// Check the connection string before configuring the exporter
var connectionString = config["ApplicationInsights:ConnectionString"];
if (useApplicationInsights && string.IsNullOrWhiteSpace(connectionString))
    throw new ConfigurationNotFoundException("ApplicationInsights", "ConnectionString");

Type guard

bool HasAppInsightsConfig(IConfiguration c) => !string.IsNullOrWhiteSpace(c["ApplicationInsights:ConnectionString"]);

Try / catch

try { return ConfigureTracing(useApplicationInsights: true); } catch (ConfigurationNotFoundException) { Console.WriteLine("App Insights not configured; using console exporter."); return ConfigureTracing(useApplicationInsights: false); }

Prevention

When it happens

Trigger: Calling ConfigureTracing(useApplicationInsights: true) when the ApplicationInsights:ConnectionString configuration key is absent — i.e., it wasn't set in user secrets, environment variables, or appsettings.json.

Common situations: Switching from console exporter to Application Insights exporter without configuring the connection string; CI environment missing the APPINSIGHTS_CONNECTIONSTRING or ApplicationInsights__ConnectionString variable; user secrets not set for the connection string; the TestConfiguration static initialization didn't pick up the section.

Related errors


AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13). Data as JSON: /api/errors/f5d93615cf05250d. Report an issue: GitHub.

Appendix: source

Thrown at dotnet/samples/GettingStartedWithAgents/Step07_Telemetry.cs:220

    }

    private TracerProvider? GetTracerProvider(bool useApplicationInsights)
    {
        // Enable diagnostics.
        AppContext.SetSwitch("Microsoft.SemanticKernel.Experimental.GenAI.EnableOTelDiagnostics", true);

        var tracerProviderBuilder = Sdk.CreateTracerProviderBuilder()
            .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Semantic Kernel Agents Tracing Example"))
            .AddSource("Microsoft.SemanticKernel*")
            .AddSource(s_activitySource.Name);

        if (useApplicationInsights)
        {
            var connectionString = TestConfiguration.ApplicationInsights.ConnectionString;

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new ConfigurationNotFoundException(
                    nameof(TestConfiguration.ApplicationInsights),
                    nameof(TestConfiguration.ApplicationInsights.ConnectionString));
            }

            tracerProviderBuilder.AddAzureMonitorTraceExporter(o => o.ConnectionString = connectionString);
        }
        else
        {
            tracerProviderBuilder.AddConsoleExporter();
        }

        return tracerProviderBuilder.Build();
    }

    private ILoggerFactory GetLoggerFactoryOrDefault(ILoggerFactory? loggerFactory = null) => loggerFactory ?? NullLoggerFactory.Instance;

    private sealed class ApprovalTerminationStrategy : TerminationStrategy
    {

View on GitHub (pinned to c028a0c7dc)