Как Вы настраиваете конфигурацию решения определенные файлы конфигурации?

Именно так должен работать ваш код.

Вы пишете 31 с количество времени, которое количество элементов в expend составляет. Попробуйте отрисовать dummyData с помощью expend = []

Вот код с фиксированной логикой и фиксированными ключами https://codesandbox.io/s/88k5ynyqy9

8
задан James 5 January 2009 в 21:44
поделиться

7 ответов

Я считаю, что наличие нескольких файлов конфигурации для каждой среды работает хорошо. Например:

  • config \ local.endpoints.xml
  • config \ dev.endpoints.xml
  • config \ test.endpoints.xml
  • config \ staging.endpoints.xml
  • config \ prod.endpoints .xml

Затем я делаю ссылку на «основную» версию этого файла, используя встроенный атрибут configSource в файле web.config или app.config, например

<appSettings configSource="config\endpoints.xml"/>

. Затем я использую процесс сборки или развертывания для копирования правильная конфигурация для среды вплоть до имени, которого ожидает web.config.

Каждая среда четко помечена и контролируется без использования запутанных заполнителей.

4
ответ дан 5 December 2019 в 19:04
поделиться

Один из способов - сохранить 3 разных файла конфигурации и выбрать их через MSBuild при развертывании.

    <Choose>
        <When Condition="$(BuildEnvironment) == 'debug'">
            <PropertyGroup>
                <ConfigFile>debug.config</ConfigFile>
            </PropertyGroup>
        </When>
        <When Condition="$(BuildEnvironment) == 'test'">
            <PropertyGroup>
                <ConfigFile>test.config</ConfigFile>
            </PropertyGroup>
        </When>
        <When Condition="$(BuildEnvironment) == 'prod'">
            <PropertyGroup>
                <ConfigFile>prod.config</ConfigFile>
            </PropertyGroup>
        </When>
    </Choose>

Используя задачу MSBuild, вы можете переименовать и переместить конкретный файл конфигурации в нужное место.

Все еще несколько громоздко, у этого есть дополнительное преимущество - перейти к одношаговой сборке .

2
ответ дан 5 December 2019 в 19:04
поделиться

Yet another option: switch to storing your application configuration in a database. I keep the type values in a database, so that management of these settings is more centralized. Then my config file has a connection string that is dedicated just for Config, and it has just two keys: a unique application ID value, and the config version (i.e. "dev", "test", etc.). Then I just deploy the right config file to the right environment.

That may not be exactly what you're looking for; it is an alternative for facilitating management of your config data.

1
ответ дан 5 December 2019 в 19:04
поделиться

Ваш первый пример - это стандартный синтаксис языка для инициализации массива целых чисел. Значение слева оценивается как int []. Во втором примере вы пытаетесь присвоить int [] для List . Оператор присваивания не поддерживает это, так как они разных типов. List не является не массивом типа int. Как вы говорите, однако, есть конструктор для List , который принимает int [] в качестве аргумента, а новый синтаксический сахар, добавленный в C # 3.0, позволяет вам удобно использовать {} для добавления членов в коллекцию, определенную конструктор по умолчанию.

Как говорит @Patrik, это не сработает для LinkedList, потому что он не определяет метод Add () как часть своего интерфейса (существует явная реализация ICollection. Возможно, вы можете сделать это в сценарии предварительной сборки; замена файла конфигурации на основе переменной env имя_конфигурации.

1
ответ дан 5 December 2019 в 19:04
поделиться

Используйте предварительно скомпилированные директивы. Пример кода:

        String configFile = String.Empty;
 #if Debug
        configFile = @"debug.config";
 #elif Test
        configFile = @"test.config";
 #elif Prod
        configFile = @"prod.config";
 #endif
        Load(configFile);

Где методом загрузки загружен файл конфигурации.

0
ответ дан 5 December 2019 в 19:04
поделиться

Проблема, которую я имею с ответом Сианя, - то, что, если Вы добавляете новую установку/конечную точку конфигурации, необходимо не забыть делать это через несколько файлов. Если Вы забудете делать таким образом, то Вы только узнаете, когда Вы развернетесь к затронутой среде (не хороший).

Вместо этого у Вас могла быть одна основная конфигурация, и использующий regex/xmlpoke (nant) / [your-favorite-text-manipulator] для массирования файл в создают/развертывают время для вставки правильных значений для каждой среды, сохраняя настройки для всех сред в другом файле (но кардинально все вместе).

Затем только необходимо поддержать один файл конфигурации и файл параметров среды - я думаю, что это делает обслуживание легче и более ясным в долгосрочной перспективе.

1
ответ дан 5 December 2019 в 19:04
поделиться

Мы используем несколько разных методов.

Environment.MachineName.config (для пользователей)

        System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();

        if (System.IO.File.Exists(String.Format("./{0}.config", Environment.MachineName)))
            fileMap.ExeConfigFilename = String.Format(@"./{0}.config", Environment.MachineName);
        else
            fileMap.ExeConfigFilename = "live.config";

        System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);

#IF DEBUG debug.config

#IF TEST test.config

#IF PROD prod.config

            System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();

#if (DEBUG)
            fileMap.ExeConfigFilename = "./debug.config";
#elif (TEST)
            fileMap.ExeConfigFilename = "./test.config";
#else
            fileMap.ExeConfigFilename = "./production.config";
#endif

            System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);

Хотя это может быть утомительным.

0
ответ дан 5 December 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: