질문하기에는 너무 사소하게 들릴 수 있으며 기사에서 제안한 것과 동일한 작업을 수행하지만 예상대로 작동하지 않습니다. 누군가가 나를 올바른 방향으로 안내 할 수 있기를 바랍니다.
AppSettings별로 사용자 설정을 저장하고 싶습니다.
Winform이 닫히면 다음을 트리거합니다.
conf.Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (ConfigurationManager.AppSettings["IntegrateWithPerforce"] != null)
ConfigurationManager.AppSettings["IntegrateWithPerforce"] =
e.Payload.IntegrateCheckBox.ToString();
else
config.AppSettings.Settings.Add("IntegrateWithPerforce",
e.Payload.IntegrateCheckBox.ToString());
config.Save(ConfigurationSaveMode.Modified);
따라서 항목이 아직 존재하지 않을 때 처음에는 단순히 생성하고, 그렇지 않으면 기존 항목을 수정합니다. 그러나 이것은 저장되지 않습니다.
1) 내가 뭘 잘못하고 있니?
2) 앱 설정에 대한 사용자 설정이 다시 저장 될 것으로 예상하는 곳은 어디입니까? 디버그 폴더 또는 C : \ Documents and Settings \ USERNAME \ Local Settings \ Application Data 폴더에 있습니까?
답변
아마도 설정 파일 추가를 살펴 봐야 할 것입니다. (예 : App.Settings)이 파일을 생성하면 다음을 수행 할 수 있습니다.
string mysetting = App.Default.MySetting;
App.Default.MySetting = "my new setting";
즉, 항목이 강력하게 입력 된 항목을 편집 한 다음 변경할 수 있으며 무엇보다도 배포하기 전에 xml을 만질 필요가 없습니다!
결과는 응용 프로그램 또는 사용자 컨텍스트 설정입니다.
설정 파일에 대한 “새 항목 추가”메뉴를보십시오.
답변
나는 내가 늦었다는 것을 안다. 🙂 그러나 이것은 내가 그것을하는 방법 :
public static void AddOrUpdateAppSettings(string key, string value)
{
try
{
var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error writing app settings");
}
}
자세한 내용은 MSDN을 참조하십시오.
답변
app.config 파일의 appSettings 섹션에서 값을 변경하는 방법 :
config.AppSettings.Settings.Remove(key);
config.AppSettings.Settings.Add(key, value);
일을합니다.
물론 더 나은 연습은 설정 클래스이지만 당신이 무엇을 추구하는지에 달려 있습니다.
답변
섹션을 선호 <appSettings>
합니다 <customUserSetting>
. (Web) ConfigurationManager로 읽고 쓰는 것이 훨씬 쉽습니다. ConfigurationSection, ConfigurationElement 및 ConfigurationElementCollection을 사용하려면 사용자 지정 클래스를 파생하고 사용자 지정 ConfigurationProperty 속성을 구현해야합니다. 단순한 일상의 필사자 IMO에게는 너무 많습니다.
다음은 web.config를 읽고 쓰는 예입니다.
using System.Web.Configuration;
using System.Configuration;
Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
string oldValue = config.AppSettings.Settings["SomeKey"].Value;
config.AppSettings.Settings["SomeKey"].Value = "NewValue";
config.Save(ConfigurationSaveMode.Modified);
전에:
<appSettings>
<add key="SomeKey" value="oldValue" />
</appSettings>
후:
<appSettings>
<add key="SomeKey" value="newValue" />
</appSettings>
답변
기본 질문은 win 양식에 관한 것이므로 여기에 해결책이 있습니다.
Configuration config = configurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings.Add("Key","Value");
config.Save(ConfigurationSaveMode.Modified);
키가 이미있는 경우 :
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings["Key"].Value="Value";
config.Save(ConfigurationSaveMode.Modified);
답변
저장 호출 후에 이것을 추가하십시오.
ConfigurationManager.RefreshSection( "appSettings" );
답변
ConfigurationManager는 시작 프로젝트에있는 app.config를 하나만 사용합니다.
일부 app.config를 솔루션 A에 넣고 다른 솔루션 B에서 참조하는 경우 B를 실행하면 A의 app.config가 무시됩니다.
예를 들어 단위 테스트 프로젝트에는 자체 app.config가 있어야합니다.
