Как изменить параметры конфигурации приложения? Приложение.config лучший способ пойти?
для моего проекта у меня есть настройки, которые я добавил через настройки в свойствах проекта.
я быстро обнаружил, что редактирование приложение.конфигурационный файл напрямую, похоже, не обновляет значение параметров. Кажется, мне нужно просмотреть свойства проекта при внесении изменений, а затем перекомпилировать.
Мне интересно ... что такое лучшие и проще всего способ обработки настраиваемых параметров для проекта -- думал, что это будет быть ежу понятно С тем, как .Net справиться с этим. .. позор мне.
можно ли использовать один из параметры параметр appsettings, applicationsettings-это или UserSettings чтобы справиться с этим?
лучше всего писать мои настройки пользовательских config и справиться сам?
прямо сейчас ... Я ищу самое быстрое решение!
мой среда-это C#, .Net 3.5 и Visual Studio 2008.
обновление
Я пытаюсь сделать следующее:
protected override void Save()
{
Properties.Settings.Default.EmailDisplayName = this.ddEmailDisplayName.Text;
Properties.Settings.Default.Save();
}
дает мне ошибку только для чтения при компиляции.
9 ответов
Это глупо ... и я думаю, что должен извиниться за то, что потратил время впустую! Но, похоже, мне просто нужно установите область в User вместо приложения, и я могу написать новое значение.
System.Configuration.Configuration config =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["oldPlace"].Value = "3";
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
попробуйте с этим кодом, легко.
Atte: Erick Siliezar
У меня была та же проблема, пока я не понял, что запускаю приложение в режиме отладки, поэтому мой новый ключ appSetting был записан в [applicationName].vshost.исполняемый.config.
и этот vshost.исполняемый.файл конфигурации не сохраняет никаких новых ключей после закрытия приложения - он возвращается к [applicationName].EXE-файл.config содержимое файла.
я протестировал его за пределами отладчика и различных методов здесь и в другом месте, чтобы добавить ключ настройки appSetting работает нормально. Новый ключ добавляется в: [applicationName].EXE-файл.config.
Я также попытался решить эту проблему, и теперь у меня есть хороший довольно ConsoleApplication, который я хочу поделиться: (App.config)
то, что вы увидите-это:
- как читать все AppSetting propery
- как вставить новое свойство
- Как удалить свойство
- Как обновить свойство
удачи!
public void UpdateProperty(string key, string value)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
KeyValueConfigurationCollection appSettings = config.AppSettings.Settings;
// update SaveBeforeExit
config.AppSettings.Settings[key].Value = value;
Console.Write("...Configuration updated: key "+key+", value: "+value+"...");
//save the file
config.Save(ConfigurationSaveMode.Modified);
Console.Write("...saved Configuration...");
//relaod the section you modified
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name);
Console.Write("...Configuration Section refreshed...");
}
public void ReadAppSettingsProperty()
{
try
{
var section = ConfigurationManager.GetSection("applicationSettings");
// Get the AppSettings section.
NameValueCollection appSettings = ConfigurationManager.AppSettings;
// Get the AppSettings section elements.
Console.WriteLine();
Console.WriteLine("Using AppSettings property.");
Console.WriteLine("Application settings:");
if (appSettings.Count == 0)
{
Console.WriteLine("[ReadAppSettings: {0}]", "AppSettings is empty Use GetSection command first.");
}
for (int i = 0; i < appSettings.Count; i++)
{
Console.WriteLine("#{0} Key: {1} Value: {2}",
i, appSettings.GetKey(i), appSettings[i]);
}
}
catch (ConfigurationErrorsException e)
{
Console.WriteLine("[ReadAppSettings: {0}]", e.ToString());
}
}
public void updateAppSettingProperty(string key, string value)
{
// Get the application configuration file.
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string sectionName = "appSettings";
config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, value);
SaveConfigFile(config);
}
public void insertAppSettingProperty(string key, string value)
{
// Get the application configuration file.
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string sectionName = "appSettings";
config.AppSettings.Settings.Add(key, value);
SaveConfigFile(config);
}
public void deleteAppSettingProperty(string key)
{
// Get the application configuration file.
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove(key);
SaveConfigFile(config);
}
private static void SaveConfigFile(System.Configuration.Configuration config)
{
string sectionName = "appSettings";
// Save the configuration file.
config.Save(ConfigurationSaveMode.Modified);
// Force a reload of the changed section. This
// makes the new values available for reading.
ConfigurationManager.RefreshSection(sectionName);
// Get the AppSettings section.
AppSettingsSection appSettingSection =
(AppSettingsSection)config.GetSection(sectionName);
Console.WriteLine();
Console.WriteLine("Using GetSection(string).");
Console.WriteLine("AppSettings section:");
Console.WriteLine(appSettingSection.SectionInformation.GetRawXml());
}
}
файл конфигурации выглядит as:
<configuration>
<configSections>
</configSections>
<appSettings>
<add key="aNewKey1" value="aNewValue1" />
</appSettings>
Ну, поэтому у меня не было никаких проблем с AppSettings с этим решением! Повеселись... ;-) !
Не уверен, что это то, что вам нужно, но вы можете обновить и сохранить настройку из приложения:
ConsoleApplication1.Свойства.Настройки.По умолчанию.StringSetting = " тест"; ConsoleApplication1.Свойства.Настройки.По умолчанию.Save();
Как вы ссылаетесь на класс настроек в коде? Вы используете экземпляр по умолчанию или создаете новый объект Settings? Я считаю, что экземпляр по умолчанию использует созданное конструктором значение, которое перечитывается из файла конфигурации только при открытии свойств. Если вы создаете новый объект, я считаю, что значение считывается непосредственно из самого файла конфигурации, а не из атрибута, созданного дизайнером, если параметр не существует в приложении.конфиг файл.
обычно Мои настройки будут в библиотеке, а не непосредственно в приложении. Я установил допустимые значения по умолчанию в файле свойств. Затем я могу переопределить их, добавив соответствующий раздел конфигурации (извлеченный и измененный из приложения библиотеки.конфигурационный файл) в конфигурации приложения (либо web.config или app.конфигурации, по мере необходимости).
использование:
Settings configuration = new Settings();
string mySetting = configuration.MySetting;
вместо:
string mySetting = Settings.Default.MySetting;
- это ключ для меня.
EDIT: моя ошибка. Я неправильно понял цель первоначального вопроса.
ОРИГИНАЛЬНЫЙ ТЕКСТ:
мы часто устанавливаем наши настройки непосредственно в приложении.файл конфигурации, но обычно это для наших пользовательских настроек.
примера приложения.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MySection" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<connectionStrings>
<add name="Default" connectionString="server=MyServer;database=MyDatabase;uid=MyDBUser;password=MyDBPassword;connection timeout=20" providerName="System.Data.SqlClient" />
</connectionStrings>
<MySection>
<add key="RootPath" value="C:\MyDirectory\MyRootFolder" /> <!-- Path to the root folder. -->
<add key="SubDirectory" value="MySubDirectory" /> <!-- Name of the sub-directory. -->
<add key="DoStuff" value="false" /> <!-- Specify if we should do stuff -->
</MySection>
</configuration>
попробуйте это:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!--- ->
</configSections>
<userSettings>
<Properties.Settings>
<setting name="MainFormSize" serializeAs="String">
<value>
1022, 732</value>
</setting>
<Properties.Settings>
</userSettings>
<appSettings>
<add key="TrilWareMode" value="-1" />
<add key="OptionsPortNumber" value="1107" />
</appSettings>
</configuration>
чтение значений из приложения.Файл Конфигурации:
//This method will read the value of the OptionsPortNumber in the
//above app.config file.
private int LoadConfigData ()
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
// AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
// points to the config file.
doc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
int smartRefreshPortNumber = 0;
foreach (XmlNode node in doc.ChildNodes.Item(1))
{
//Searching for the node “”
if (node.LocalName == "appSettings")
{
smartPortNumber =Convert.ToInt32(node.ChildNodes.Item(1).Attributes[1].Value);
}
}
Return smartPortNumber;
}
обновление значения в приложении.config:
//This method will read the value of the OptionsPortNumber in the
//above app.config file.
private void UpdateConfigData()
{
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
//Looping through all nodes.
foreach (XmlNode node in doc.ChildNodes.Item(1))
{
//Searching for the node “”
if (node.LocalName == "appSettings")
{
if (!dynamicRefreshCheckBox.Checked)
{
node.ChildNodes.Item(1).Attributes[1].Value = this.portNumberTextBox.Text;
}
else
{
node.ChildNodes.Item(1).Attributes[1].Value = Convert.ToString(0);
}
}
}
//Saving the Updated values in App.config File.Here updating the config
//file in the same path.
doc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
}
ваш ответ, вероятно, здесь: самый простой способ иметь файл конфигурации в приложении Windows Forms C#