невозможно сохранить настройки в приложении.исполняемый.конфиг
я столкнулся с одной проблемой.
Я хочу сохранить настройки в приложение.файл config
Я написал отдельный класс и определенный раздел в файле конфигурации..
но когда я запустить приложение. он не сохраняет заданные значения в файл конфигурации
вот SettingsClass
public class MySetting:ConfigurationSection
{
private static MySetting settings = ConfigurationManager.GetSection("MySetting") as MySetting;
public override bool IsReadOnly()
{
return false;
}
public static MySetting Settings
{
get
{
return settings;
}
}
[ConfigurationProperty("CustomerName")]
public String CustomerName
{
get
{
return settings["CustomerName"].ToString();
}
set
{
settings["CustomerName"] = value;
}
}
[ConfigurationProperty("EmailAddress")]
public String EmailAddress
{
get
{
return settings["EmailAddress"].ToString();
}
set
{
settings["EmailAddress"] = value;
}
}
public static bool Save()
{
try
{
System.Configuration.Configuration configFile = Utility.GetConfigFile();
MySetting mySetting = (MySetting )configFile.Sections["MySetting "];
if (null != mySetting )
{
mySetting .CustomerName = settings["CustomerName"] as string;
mySetting .EmailAddress = settings["EmailAddress"] as string;
configFile.Save(ConfigurationSaveMode.Full);
return true;
}
return false;
}
catch
{
return false;
}
}
}
и это код, из которого я сохраняю информацию в файле конфигурации
private void SaveCustomerInfoToConfig(String name, String emailAddress)
{
MySetting .Settings.CustomerName = name;
MySetting .Settings.EmailAddress = emailAddress
MySetting .Save();
}
и это приложение.config
<configuration>
<configSections>
<section name="MySettings" type="TestApp.MySettings, TestApp"/>
</configSections>
<MySettings CustomerName="" EmailAddress="" />
</configuration>
can u скажите мне, где ошибка.. я много пробовал и читал из интернета. но по-прежнему не удается сохранить информацию в файле конфигурации..
я запустил приложение, дважды щелкнув по exe-файлу.
4 ответов
по словам MSDN: ConfigurationManager.Метод GetSection,
на ConfigurationManager.GetSection
метод получает параметры конфигурации что он не может изменить. Чтобы изменить конфигурацию, используйте Configuration.GetSection
метод в файле конфигурации, который вы получаете с помощью одного из следующих открытых методы:
однако, если вы хотите обновить приложение.конфигурационный файл, я бы прочитал его как xml-документ и манипулировал им как обычным xml-документом.
см. следующий пример: Примечание: этот образец как раз для доказательство концепции. Не следует использовать в производстве как есть.
using System;
using System.Linq;
using System.Xml.Linq;
namespace ChangeAppConfig
{
class Program
{
static void Main(string[] args)
{
MyConfigSetting.CustomerName = "MyCustomer";
MyConfigSetting.EmailAddress = "MyCustomer@Company.com";
MyConfigSetting.TimeStamp = DateTime.Now;
MyConfigSetting.Save();
}
}
//Note: This is a proof-of-concept sample and
//should not be used in production as it is.
// For example, this is not thread-safe.
public class MyConfigSetting
{
private static string _CustomerName;
public static string CustomerName
{
get { return _CustomerName; }
set
{
_CustomerName = value;
}
}
private static string _EmailAddress;
public static string EmailAddress
{
get { return _EmailAddress; }
set
{
_EmailAddress = value;
}
}
private static DateTime _TimeStamp;
public static DateTime TimeStamp
{
get { return _TimeStamp; }
set
{
_TimeStamp = value;
}
}
public static void Save()
{
XElement myAppConfigFile = XElement.Load(Utility.GetConfigFileName());
var mySetting = (from p in myAppConfigFile.Elements("MySettings")
select p).FirstOrDefault();
mySetting.Attribute("CustomerName").Value = CustomerName;
mySetting.Attribute("EmailAddress").Value = EmailAddress;
mySetting.Attribute("TimeStamp").Value = TimeStamp.ToString();
myAppConfigFile.Save(Utility.GetConfigFileName());
}
}
class Utility
{
//Note: This is a proof-of-concept and very naive code.
//Shouldn't be used in production as it is.
//For example, no null reference checking, no file existence checking and etc.
public static string GetConfigFileName()
{
const string STR_Vshostexe = ".vshost.exe";
string appName = Environment.GetCommandLineArgs()[0];
//In case this is running under debugger.
if (appName.EndsWith(STR_Vshostexe))
{
appName = appName.Remove(appName.LastIndexOf(STR_Vshostexe), STR_Vshostexe.Length) + ".exe";
}
return appName + ".config";
}
}
}
Я также добавил атрибут "TimeStamp" в MySettings в приложении.config легко проверить результат.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MySettings" type="TestApp.MySettings, TestApp"/>
</configSections>
<MySettings CustomerName="" EmailAddress="" TimeStamp=""/>
</configuration>
во многих случаях (в сценарии ограниченного пользователя) Пользователь не имеет права на запись непосредственно в файл конфигурации приложения. Чтобы обойти это, вам нужно использовать usersettings.
если щелкнуть правой кнопкой мыши проект и выбрать вкладку "Настройки", можно составить список настроек, которые хранятся в конфигурационном файле. Если выбрать "область" как "пользователь", параметры будут автоматически сохранены в файле конфигурации с использованием типа, который будет автоматически хранить параметры в области users AppData, где пользователь всегда имеет доступ на запись. Параметры также автоматически предоставляются в качестве свойств, созданных в Properties\Settings.Дизайнер.cs код файла, и доступны в вашем коде в Properties.Settings.Default
.
пример:
предположим, вы добавляете параметр пользователя CustomerName:
при загрузке приложения вы захотите восстановить значение из сохраненного параметра ( либо значение по умолчанию, как в конфигурации приложения, или если он хранится для этого пользователя, файл конфигурации для пользователя):
string value = Properties.Settings.Default.CustomerName;
когда вы хотите изменить значение, просто напишите это:
Properties.Settings.Default.CustomerName = "John Doe";
если вы хотите сохранить все настройки, просто вызовите Save:
Properties.Settings.Default.Save();
обратите внимание, что при разработке пользовательский файл будет сброшен по умолчанию, но это происходит только при создании приложения. Когда вы просто запустите приложение, настройках магазина будет читать от пользователя-config для приложение.
если вы все еще хотите создать свою собственную обработку настроек, вы можете попробовать это один раз и посмотреть, что VisualStudio автоматически создал для вас, чтобы получить представление о том, что вам нужно, чтобы это работало.
чтобы фактически обновить файл конфигурации, вам нужно будет вызвать .Save()
на Configuration
object-не только объект раздела конфигурации.
вы должны проверить трехкомпонентную серию Джона Риста в конфигурации .NET 2.0 на CodeProject.
- разгадывание тайн конфигурации .NET 2.0
- расшифровка тайн конфигурации .NET 2.0
- взлом тайны .NET 2.0 конфигурация
настоятельно рекомендуется, хорошо написано и очень полезно! Он показывает все входы и выходы работы с .NET 2.0 и конфигурацией up и очень помог мне понять эту тему.
Марк
имейте в виду, что имя приложения.vshost.исполняемый.Config возвращается в исходное состояние в конце сеанса отладки. Таким образом, вы можете сохранить файл (вы можете проверить с помощью блокнота во время выполнения), а затем потерять сохраненное содержимое при остановке отладки.