ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: ironMan
22. ноября 2010 03:47

Можно было бы предположить, что под Net Framework будет удобно записывать конфигурацию в файл. Но .Net Framework предоставляет простые методы для чтения из файла конфигурации и не дает ничего для записи значения обратно в App.Config. На самом деле достаточно легко записать значения обратно в файл. Ведь App.Config это всего лишь XML. Когда необходимо работать с конфигурацией удобно было бы использовать один класс, который бы умел создавать, читать, писать, стирать части конфигурации в App.Config.

Предупреждение !!! Обычно App.Config используется для записи данных вручную или при начальном конфигурировании приложения и только для чтения во время работы программы. Если программа начинает писать в файл App.Config сама, то теперь от нее требуется гораздо больше самоконтроля. Для того чтобы она не записала некорректную информацию и смогла стартовать в следующий раз. Также программа не должна по ошибке затереть или неверно изменить системные части App.Config. При обычном использовании App.Config ответственность за правильное составление конфигурационного файла лежит на конфигурирующем ПО или пользователе/администраторе.

Конфигурационный файл для приложений NET представляет собой текстовый файл, который имеет название myapplication.exe.config. Visual Studio упрощает жизнь программистам и позволяет добавить файл с именем "App.config" в проект. При компиляции он будет скопирован в соответствующий каталог Bin и переименован в myapplication.exe.config. Этот конфигурационный файл предназначен для хранения статических значений (настройки для вашего приложения). Конфигурационный файл это не более, чем обычный XML файл. Вот пример из файла конфигурации приложения:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Test1" value="My value 1" />
<add key="Test2" value="Another value 2" />
</appSettings>
</configuration>


Net Framework делает жизнь проще при чтении значений из App.Config. Класс ConfigurationSettings в пространстве имен System.Configuration имеет статическое индексированное свойство AppSettings. Это свойство возвращает NameValueCollection. Чтобы прочитать значение с ключем "Test1" из конфигурационного файла можно сделать так:


string test1 = ConfigurationSettings.AppSettings["Test1"];


Следует отметить, что это позволит вам только читать настройки и только из раздела AppSettings. Если у вас добавлены другие разделы, то вы не сможете прочитать их таким образом. Для записи значения нужно открыть конфигурационный файл как XmlDocument и писать. Через XmlDocument вы можете добавлять пары имя/значение, удалять элементы, изменять и, при желании, читать. Дальше идет исходник класса на C#, который позволяет читать, записывать и удалять настройки в разделе AppSettings файла App.Config.


using System;
using System.Xml;
using System.Configuration;
using System.Reflection;

public static class ConfigSettings
{
public static string ReadSetting(string key)
{
return ConfigurationSettings.AppSettings[key];
}

public static void WriteSetting(string key, string value)
{
XmlDocument doc = loadConfigDocument();
XmlNode node = doc.SelectSingleNode("//appSettings");

if (node == null)
throw new InvalidOperationException("appSettings section not found in config file.");

try
{
XmlElement elem = (XmlElement)node.SelectSingleNode(string.Format("//add[@key='{0}']", key));

if (elem != null)
{
elem.SetAttribute("value", value);
}
else
{
elem = doc.CreateElement("add");
elem.SetAttribute("key", key);
elem.SetAttribute("value", value);
node.AppendChild(elem);
}
doc.Save(getConfigFilePath());
}
catch
{
throw;
}
}

public static void RemoveSetting(string key)
{
XmlDocument doc = loadConfigDocument();
XmlNode node = doc.SelectSingleNode("//appSettings");

try
{
if (node == null)
throw new InvalidOperationException("appSettings section not found in config file.");
else
{
node.RemoveChild(node.SelectSingleNode(string.Format("//add[@key='{0}']", key)));
doc.Save(getConfigFilePath());
}
}
catch (NullReferenceException e)
{
throw new Exception(string.Format("The key {0} does not exist.", key), e);
}
}

private static XmlDocument loadConfigDocument()
{
XmlDocument doc = null;
try
{
doc = new XmlDocument();
doc.Load(getConfigFilePath());
return doc;
}
catch (System.IO.FileNotFoundException e)
{
throw new Exception("No configuration file found.", e);
}
}

private static string getConfigFilePath()
{
return Assembly.GetExecutingAssembly().Location + ".config";
}
}


Пример использования этого класса:


string test1 = ConfigSettings.ReadSetting("Test1");
ConfigSettings.WriteSetting("Test1", "This is my new value");
ConfigSettings.RemoveSetting("Test1");

И на последок. Помните. что если вы изменили что-нибудь в конфигурации, то ... Во-первых, изменения вступят в силу только при следующем запуске программы (видимо конфигурация закэширована). И во-вторых, изменения производятся в текущем конфигурационном файле программы myapplication.exe.config, а не в файле App.Config прицепленом к проекту в Visual Studio.

 


Хотите улучшить свою BMW ? Тогда вам на тюнинг BMW.

Производитель надеется, что благодаря демократичной цене и неплохой вместимости купить Suzuki Splash захотят молодые семьи с одним или двумя детьми.

Спонсирует ли Калининград гостиницы, расположенные в городе? Да, но косвенно. Это, прежде всего – реклама региона, вложения в транспорт и инфраструктуру, льготные кредиты.

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

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

Silverlight, HTML5 и непрозрачная стратегия развития Microsoft
Оригинал статьи взят отсюда: Silverlight, HTML5 и непрозрачная стратегия развития Microsoft Автор: Peter Bright Переводчик: Mairon     По непонятным мне на данный момент причинам, похоже, что многие разработчики, присутствовавшие на недавней конференции PDC-2010 (Крупнейшая конференция Microsoft для разработчиков — Прим. переводчика), были сильн...

Комментарии

 
kittycat 25.11.2010 1:59:08 #

По мне так проще использовать секции и елементы, а проще они потому, что в них можно писать.
Это 2 основных класса пространства имен System.Configuration - ConfigurationSection и ConfigurationElement.

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий