Я использую, чтобы установить некоторую переменную среды, чтобы перезаписать значения параметров приложения, характерные для моей машины разработчика (например, строки подключения, локальные конечные точки и т. д.). Я установил их в переменных пользователя для своей учетной записи, например, имя переменной: ConnectionStrings:DbConnectionString, значение переменной: ******************
Затем я вызываю метод Main (веб-приложения .NET core 3.1):
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((builderContext, config) =>
{
var env = builderContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
config.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
config.AddCommandLine(args);
})
Это прекрасно работает, перезаписывая значения параметров приложения в строках подключения и в нескольких пользовательских классах параметров, но я не могу заставить его читать значения GUID. Я пытался написать их с двойными вершинами или без них, но они игнорируются, в то время как они правильно загружаются и анализируются из настроек приложения.
Если я изменю тип свойства в своем классе Options на String, тогда GUID будет загружен как строка из переменных env, как и ожидалось.
Итак, в качестве обходного пути я загрузил значение в строковое свойство и преобразовал его в GUID в другом свойстве класса Options.
Это работает, но я хотел бы понять, есть ли более чистый способ сделать это. Есть ли специальный синтаксис для записи GUID в переменных env?
Спасибо





После еще нескольких тестов я обнаружил, что проблема связана с синтаксисом Guid: хотя в файле appsettings вы можете написать его с дефисами (например, 0713d50d-e508-4212-b174-7582a5c90224), в переменной Windows env значение должно быть пишется без дефисов и без кавычек, одинарных или двойных (т.е. ee1b55626c8148aab62cc67dc7f6010e).
Таким образом, он правильно читается как Guid (если это действительный Guid, конечно)
Извините, я имел в виду кавычки, одинарные или двойные
Боюсь, нет более чистого способа сделать это и нет специального синтаксиса для записи значений Guid. Я думаю, что все значения в переменной среды хранятся в виде строки. Что вы можете сделать, так это сохранить значение GUID следующим образом:
Guid('{d73dafd0-8261-47c2-b512-86896d8f6826}'), чтобы при чтении некоторого значения, начинающегося сGuid(..., вы пытались проанализировать значение сGuid.TryParse(). Адаптируйте свой код к ограничениям системы, если вы можете читать и преобразовывать любое значение, полученное из переменных env.