для моего проекта у меня есть настройки, которые я добавил через настройки в свойствах проекта.
я быстро обнаружил, что редактирование приложение.конфигурационный файл напрямую, похоже, не обновляет значение параметров. Кажется, мне нужно просмотреть свойства проекта при внесении изменений, а затем перекомпилировать.
-
Мне интересно … что такое лучшие
и проще всего способ обработки настраиваемых параметров
для проекта — думал, что это будет
быть ежу понятно С тем, как .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:MyDirectoryMyRootFolder" /> <!-- 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);
}
I’m writing a test WinForms / C# / .NET 3.5 application for the system we’re developing and we fell in the need to switch between .config files at runtime, but this is turning out to be a nightmare.
Here’s the scene: the WinForms application is aimed at testing a WebApp, divided into 5 subsystems. The test process works with messages being sent between the subsystems, and for this process to be successful each subsystem got to have its own .config file.
For my Test Application I wrote 5 separate configuration files. I wish I was able to switch between these 5 files during runtime, but the problem is: I can programatically edit the application .config file numerous times, but these changes will only take effect once. I’ve been searching a long time for a form to address this problem but I still wasn’t successful.
I know the problem definition may be a bit confusing but I would really appreciate it if someone helped me.
Thanks in advance!
— UPDATE 01-06-10 —
There’s something I didn’t mention before. Originally, our system is a Web Application with WCF calls between each subsystem. For performance testing reasons (we’re using ANTS 4), we had to create a local copy of the assemblies and reference them from the test project. It may sound a bit wrong, but we couldn’t find a satisfying way to measure performance of a remote application.
— End Update —
Here’s what I’m doing:
public void UpdateAppSettings(string key, string value)
{
XmlDocument xmlDoc = XmlDocument.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
foreach (XmlElement item in xmlDoc.DocumentElement)
{
foreach (XmlNode node in item.ChildNodes)
{
if (node.Name == key)
{
node.Attributes[0].Value = value;
break;
}
}
}
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
System.Configuration.ConfigurationManager.RefreshSection("section/subSection");
}
I’m writing a test WinForms / C# / .NET 3.5 application for the system we’re developing and we fell in the need to switch between .config files at runtime, but this is turning out to be a nightmare.
Here’s the scene: the WinForms application is aimed at testing a WebApp, divided into 5 subsystems. The test process works with messages being sent between the subsystems, and for this process to be successful each subsystem got to have its own .config file.
For my Test Application I wrote 5 separate configuration files. I wish I was able to switch between these 5 files during runtime, but the problem is: I can programatically edit the application .config file numerous times, but these changes will only take effect once. I’ve been searching a long time for a form to address this problem but I still wasn’t successful.
I know the problem definition may be a bit confusing but I would really appreciate it if someone helped me.
Thanks in advance!
— UPDATE 01-06-10 —
There’s something I didn’t mention before. Originally, our system is a Web Application with WCF calls between each subsystem. For performance testing reasons (we’re using ANTS 4), we had to create a local copy of the assemblies and reference them from the test project. It may sound a bit wrong, but we couldn’t find a satisfying way to measure performance of a remote application.
— End Update —
Here’s what I’m doing:
public void UpdateAppSettings(string key, string value)
{
XmlDocument xmlDoc = XmlDocument.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
foreach (XmlElement item in xmlDoc.DocumentElement)
{
foreach (XmlNode node in item.ChildNodes)
{
if (node.Name == key)
{
node.Attributes[0].Value = value;
break;
}
}
}
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
System.Configuration.ConfigurationManager.RefreshSection("section/subSection");
}
Сообщение от kmet_misha
Просто интересно, везде написано, что можно изменять app.config и куча способов как это сделать, даже на MSDN.
Можно конечно, почему нет?
Сообщение от kmet_misha
А вы говорите что этот файл не изменяется программно. Вы противоречите MSDN?
Это где я, простите, такое сказал? Да еще и MSDN противоречил?
Не нужно != не можно
Сообщение от kmet_misha
Цель изменения файла конфигурации в изменении строки подключения к БД(например БД изменила свое имя или пароль или место раположения)
Вот так я изменял путь к локальному файлу SQLite в скрипте для инсталлера:
| C# | ||
|
Все прекрасно работало. Настройки хранятся в файле <exename>.exe.config рядом с программой.
Если вы пытаетесь изменить файл из процесса, которому он принадлежит, то перед вызовом config.Save добавьте такую строку:
| C# | ||
|
Или такую, если не помните имя секции:
| C# | ||
|
Это если вы изменяете/добавляете/удаляете строки соединения.
Но изменять этот файл из главной программы я бы все равно не рекомендовал.
Обычные пользователи будут хватать исключение на ограниченный доступ к файлу при попытке сохранить, а админ может и руками файл исправить. На худой конец, сделайте отдельную утилиту для настроек этих параметров и приложите к ней манифест, в котором подключите требование запускать под админом.
Вставка новых значений в файл конфигурации во время работы приложения
В большинстве случаев для того, чтобы обновить содержимое файла конфигурации приложения, используется
ConfigurationManager
Допустим у нас есть файл конфигурации:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="Setting1" value="1" /> <add key="Setting2" value="2" /> </appSettings> </configuration>
Код ниже показывает, как вставить новый параметр в файл конфигурации, используя C#:
public Form1() { InitializeComponent(); } private void ShowConfig() { // Для доступа на чтения не требуется вызывать OpenExeConfiguraton foreach (string key in ConfigurationManager.AppSettings) { string value = ConfigurationManager.AppSettings[key]; MessageBox.Show(String.Format("Key: {0}, Value: {1}", key, value)); } } private void UpdateConfig() { // Открываем App.Config исполняемого файла System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Добавляем новый параметр config.AppSettings.Settings.Add("Setting3", "3"); // Сохраняем файл конфигурации config.Save(ConfigurationSaveMode.Modified, true); // Обновляем раздел конфигурации, чтобы новые значения были доступны для чтения ConfigurationManager.RefreshSection("appSettings"); } private void button1_Click(object sender, EventArgs e) { ShowConfig(); } private void button2_Click(object sender, EventArgs e) { UpdateConfig(); }
Изменение существующих значений в файле конфигурации
Так как
Configuration.AppSettings свойства доступны только для чтения, то для изменения значения существующего параметра придется воспользоваться
XmlDocument классом, чтобы напрямую изменить файл конфигурации.
Оригинальный App.config файл:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="Setting1" value="1" /> <add key="Setting2" value="2" /> </appSettings> </configuration>
Ниже код показывает, как изменить значение параметра:
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); foreach (XmlElement element in xmlDoc.DocumentElement) { if (element.Name.Equals("appSettings")) { foreach (XmlNode node in element.ChildNodes) { if (node.Attributes[0].Value.Equals("Setting1")) { node.Attributes[1].Value = "New Value"; } } } } xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); ConfigurationManager.RefreshSection("appSettings");
Для связи [mail]
Метод настройки Spring Boot
Выполняется в Spring BootСоглашение лучше конфигурацииПринцип, поэтому нам очень легко создать приложение Spring Boot. В реальном производственном процессе нам необходимо выполнить дополнительную конфигурацию для проекта, так как же нам использовать эту дополнительную конфигурацию?
Spring Boot позволяет использовать внешнюю конфигурацию, чтобы мы могли использовать один и тот же код приложения в разных средах. Эти конфигурации могут быть перенесены во внешний вид с помощью файлов свойств, файлов YAML, переменных среды и параметров командной строки. Можно использовать значение атрибута@ValueАннотация напрямую вводится в компонент, доступ к ней осуществляется через абстракцию Spring Environment или через@ConfigurationPropertiesПривязка к структурированным объектам.
Spring Boot использует особый порядок PropertySource, который позволяет разумно переписывать значения. Атрибуты рассматриваются в следующем порядке:
-
Devtools global settings properties on your home directory (
~/.spring-boot-devtools.propertieswhen devtools is active). -
@TestPropertySourceannotations on your tests. -
@SpringBootTest#propertiesannotation attribute on your tests. -
Command line arguments.
-
Properties from
SPRING_APPLICATION_JSON(inline JSON embedded in an environment variable or system property) -
ServletConfiginit parameters. -
ServletContextinit parameters. -
JNDI attributes from
java:comp/env. -
Java System properties (
System.getProperties()). -
OS environment variables.
-
A
RandomValuePropertySourcethat only has properties inrandom.*. -
Profile-specific application properties outside of your packaged jar (
application-{profile}.propertiesand YAML variants) -
Profile-specific application properties packaged inside your jar (
application-{profile}.propertiesand YAML variants) -
Application properties outside of your packaged jar (
application.propertiesand YAML variants). -
Application properties packaged inside your jar (
application.propertiesand YAML variants). -
@PropertySourceannotations on your@Configurationclasses. -
Default properties (specified using
SpringApplication.setDefaultProperties).
В этой статье в основном обсуждаетсяapplication.propertiesДля дополнительной настройки в файле конфигурации см. Сведения о других методах использования конфигурации.Вот。
Использование файла application.properties
SpringApplication будет из следующего местаapplication.propertiesФайл загружает атрибуты и добавляет их в среду Spring:
- Подкаталог / config по текущему пути.
- Текущий путь.
- Подпуть / config в пути к классам.
- путь к классам
Список сортируется по приоритету (атрибуты, определенные выше в списке, переопределяют атрибуты, определенные в более низких позициях).
вВышевresourcesДобавление каталогаapplication.propertiesФайл, добавьте следующую конфигурацию
#tomcatНомер порта
server.port=8888
Запустите программу Spring Boot, и номер порта, к которому мы сейчас обращаемся к программе, станет 8888.
Большеapplication.propertiesКонфигурация, см.Официальный документ。
Пример программы в этой статьекликните сюдаПолучить.
Подробнее см.Официальный сайт Spring Boot。
Как включить возможность редактирование объектов в 1С? Как именно происходит изменение конфигурации в 1С? Рассказываем подробнее и представляем вашему вниманию пошаговую инструкцию для большей наглядности!
Включение возможности редактирования объектов
Действительно, для типовых конфигураций 1С возможность редактирования объектов отключена.
Для того, чтобы включить данную возможность необходимо сделать несколько действий.
Запускаем 1С в режиме конфигуратор.
Выбираем пункт «Поддержка» вменю «Конфигурация». Подпункт «Настройки поддержки».
Если нужно отредактировать конкретный объект конфигурации, то нет необходимости менять правило для всей конфигурации. Найдите в списке интересующий объект, кликните по нему правой кнопкой мыши и выберите «Установить правило поддержки»
В открывшемся окне выбираем «Объект поставщика редактируется с сохранением поддержки». В случае если необходимо отредактировать подчинённые объекты, устанавливаем галочку для опции «Установить для подчинённых объектов»
Если необходимо включить возможность редактирования для всех объектов конфигурации, то в правом верхнем углу открывшегося окна нажимаем кнопку «Включить возможность изменения»
В появившемся диалоговом окне отвечаем «Да»
Все объекты конфигурации делятся на два вида: «Объекты с правилом «Изменения разрешены» и «Объекты с правилом «Изменения не рекомендуются». Для каждого вида необходимо выбрать настройку.
По умолчанию значения установлены «Объект поставщика не редактируется». Рекомендуется установить «Объект поставщика редактируется с сохранением поддержки» для объектов с правилом «Изменения разрешены» и «Объект поставщика не редактируется» для объектов с правилом «Изменения не рекомендуются».
Необходимо обновить конфигурацию базы данных. Это можно сделать с помощью кнопки на панели или нажав F7
Для редактирования конкретного объекта конфигурации нужно в «Настройка поддержки» установить значение «Редактируется с сохранением поддержки. Если необходимо запретить редактирование конкретного объекта конфигурации, то установите свойство «Не редактируется».
Возвращение конфигурации на поддержку
В первую очередь перед проведением каких-либо операций необходимо сделать резервную копию вашей базы.
В качестве демонстрации вернём поддержку базе из примера выше.
- Типовая конфигурация, ещё её называют конфигурацией от поставщика
- Конфигурация нашей информационной базы
- Основная конфигурация
При запуске обновления конфигурации выполняется следующая последовательность действий:
- Обновление типовой конфигурации
- Типовая конфигурация заменяет конфигурацию вашей базы, но только в случае «Объекты поставщика не редактируются»
- Запуск «Режима сравнения и объединения», в случае если ваша база «Объекты поставщика редактируется с сохранением поддержки»
- Обновление конфигурации нашей информационной базы
В первую очередь необходимо узнать номер текущего релиза нашей конфигурации. Запускаем 1С, в меню «Справка» выбираем пункт «О программе».
На рисунке выделена строка, содержащая номер релиза
Запускам 1С в режиме конфигуратор. Выбираем пункт «Поддержка» вменю «Конфигурация». Подпункт «Настройки поддержки».
Смотрим номер текущего релиза конфигурации поставщика.
В нашем примере релизы совпадают. Нажимаем кнопку «Сохранить в файл».
Выбираем пункт «Загрузить конфигурацию из файлов» вменю «Конфигурация».
Будет произведено замещение нашей текущей конфигурации, конфигурацией содержащейся в файле.
Производим обновление конфигурации
Восстановлена «Полная поддержка».
Как можно оптимизировать работу с 1С?
В работе с 1С постоянно возникает множество вопросов — от решения проблем до обновления или потребности в доработке программы. Не у каждой компании есть соответствующие специалисты, способные помочь в перечисленных ситуациях, а если и есть, то не всегда бывает целесообразно отвлекать их на мелкие задачи.
Чтобы обновления происходили без проблем, а на все вопросы вы могли получать ответы, приглашаем обращаться за сопровождением 1С к профессионалам, в компанию «ПРОГРАММЫ 93».
Почему нас выбирают?
ООО «ПРОГРАММЫ 93» — это компания с большим штатом сотрудников, в который входят не только специалисты 1С, но и бухгалтеры, юристы и другие эксперты смежных областей.
В результате вы получаете услуги от опытных компетентных специалистов, не зависите от одного человека и не отвлекаете штатных специалистов от стратегических задач.
Мы можем предложить вам:
- доработку программы под ваши нужды;
- поддержку продуктов 1С;
- интеграцию программы с сайтом;
- внедрение других продуктов 1С;
- сопровождение бухгалтерского и налогового учета.
Позвоните по номеру телефона, указанному на сайте или заполните форму обратной связи, чтобы мы могли ответить на все возникающие вопросы и рассказать о том, как начать сотрудничество!




















