Настройки App.config, переменная среды как частичный путь

Я новичок в работе с app.config и xml, и в настоящее время занимаюсь рефакторингом кода, который еще не писал.
В настоящее время у нас есть фрагмент кода, который выглядит следующим образом:

<setting name="FirstSetting" serializeAs="String">
  <value>Data Source=C:\Documents and Settings\All Users\ApplicationData\Company ...;Persist Security Info=False</value>

Я бы хотел, чтобы вместо этого он указывал на что-то вроде ${PROGRAMDATA}\Company\...

Как я могу добиться этого, имея в виду, что PROGRAMDATA не всегда будет указывать на C:\ProgramData?


person Jean-Bernard Pellerin    schedule 14.03.2011    source источник


Ответы (5)


Я действительно не хотел менять его в коде, как в других ответах, поскольку это устраняет цель использования его в качестве параметра конфигурации.

Как оказалось, %ProgramData%\Company... — правильный способ использования переменных окружения в этом контексте.

person Jean-Bernard Pellerin    schedule 16.03.2011
comment
Просто чтобы уточнить, что это находится в C:\ProgramData, а не где-то в C:\Users (Win7) - person Cel; 30.10.2011
comment
Правильно, получается C:\ProgramData\Company. Проблема, с которой мы столкнулись, заключалась в том, что иногда этот каталог находится на другом диске, поэтому использование переменной среды более чистое и всегда отображается правильно. - person Jean-Bernard Pellerin; 31.10.2011

использовать

Environment.ExpandEnvironmentVariables(stringFromConfig);

он заменяет все существующие переменные среды в строке, например %ProgramData%, точными значениями.

person troYman    schedule 23.10.2014

Да пишите просто так в своих настройках. Затем просто замените ${PROGRAMDATA} во время выполнения:

        var setting = Properties.Settings.Default.FirstSetting;
        setting = setting.Replace("${PROGRAMDATA)", 
            Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
person Hans Passant    schedule 14.03.2011
comment
Если вы пишете код для этого, не вводите другой синтаксис для переменных среды, а затем пытайтесь расширить их самостоятельно. Используйте стандартный (Windows) формат %NAME%, а затем вы можете просто вызвать System.Environment.ExpandEnvironmentVariables в строке, чтобы сделать все за вас. - person voyce; 27.09.2012

Учитывая, что PROGRAMDATA является переменной среды, вы можете получить доступ с помощью С#

String EnviromentPath = System.Environment.GetEnvironmentVariable("PROGRAMDATA", EnvironmentVariableTarget.Machine);
person Kumar    schedule 14.03.2011

вы могли бы использовать

var programDataValue = Environment.GetEnvironmentVariable("PROGRAMDATA");

если это происходит из переменной окружения.

person Bala R    schedule 14.03.2011