Ну, во-первых, если вы не размещаете службу приложений Azure или не хотите устанавливать переменную среды.Какой из них действительно используется, зависит от того, как настроен ваш конфигуратор.
Обычно у вас есть что-то подобное в Startup.cs
или Programm.cs
:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddUserSecrets<Startup>()
.AddEnvironmentVariables(); // Environment Variables override all other
Порядок, в котором.AddXxx
звонки используются независимо от того,Будет использована последняя регистрация с соответствующим ключом.Здесь .AddEnvironmentVariables()
является последним.Если установлена переменная APPINSIGHTS_INSTRUMENTATIONKEY
, она переопределит все значения для Appinsights:InstrumentationKey
, заданного в секретах пользователя, appsettings.Development.json
или appsettings.json
.
Если APPINSIGHTS_INSTRUMENTATIONKEY
не задано, библиотека конфигурации изучит пользовательские секреты и будет использовать их, если они найдены.Если он не найден, он будет искать appsettings.Development.json
, и если он не содержит поиска значений appsettings.json
.
TL; DR : будет использоваться только одна форма appsettings.jsonкогда переменная окружения не установлена.
Обновление
Новый ответ
Как видно из кода , метод расширения Application Insight для его регистрации будет переопределять значения из любой переменной средыили из appsettings.json, когда он находит соответствующие записи.
Примечание : при удалении .AddEnvironmentVariables()
it никогда не будет использовать значение, установленное в портале Azure, поскольку .AddEnvironmentVariables()
загружает переменную среды вконфигурация с ключом APPINSIGHTS_INSTRUMENTATIONKEY
(см. ниже).
private const string InstrumentationKeyFromConfig = "ApplicationInsights:InstrumentationKey";
private const string InstrumentationKeyForWebSites = "APPINSIGHTS_INSTRUMENTATIONKEY";
Когда его там нет, он пытается использовать обычный ключ из appsettings.json ApplicationInsights:InstrumentationKey
.
В вашем примере
var instrumentationKey= Configuration.GetSection("APPINSIGHTS_INSTRUMENTATIONKEY ").Value;
services.AddApplicationInsightsTelemetry(opt => opt.InstrumentationKey = instrumentationKey);
Переданное значение не будет использоваться , если только вы оба не удалите переменную среды (или .AddEnvironmentVariables()
) AND удалить запись из appsettings.json
.
Так что для наиболее распространенной конфигурации достаточно вызвать
services.AddApplicationInsightsTelemetry(Configuration);
, где Configuration
- это IConfigurationRoot
.Эта перегрузка будет загружать его из переменной среды или из appsettings.json, если она найдена.
Если вы хотите более программный контроль над ним, вы используете
services.AddApplicationInsightsTelemetry(options => {
// some logic here, where you can override the default behavior described above
});