После большей части дневного исследования я все еще не могу определить, почему следующий код не работает должным образом.
bool complete = false;
...
Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
BatchCompiler bc = new BatchCompiler(cfg.AppSettings.Settings);
... do stuff with bc ...
// Store the output of the operation.
BatchCompilerConfiguration bcc = (BatchCompilerConfiguration)ConfigurationManager.GetSection("BatchCompiler");
bcc.FilesCopied = complete;
bcc.OutputPath = bc.OutputPath;
cfg.Save(); // This does not write the modified properties to App.Config.
//cfg.SaveAs(@"c:\temp\blah.config") // This creates a new file Blah.Config with the expected section information, as it should.
Определение конфигурации BatchCompilerConfiguration:
public sealed class BatchCompilerConfiguration : ConfigurationSection
{
public BatchCompilerConfiguration()
{
}
public override bool IsReadOnly()
{
return false;
}
[ConfigurationProperty("filesCopied", DefaultValue = "false")]
public bool FilesCopied
{
get { return Convert.ToBoolean(base["filesCopied"]); }
set { base["filesCopied"] = value; }
}
[ConfigurationProperty("outputPath", DefaultValue = "")]
public string OutputPath
{
get { return Convert.ToString(base["outputPath"]); }
set { base["outputPath"] = value; }
}
}
Вот соответствующие разделы из App.Config:
<configSections>
<section name="BatchCompiler" type="BatchCompiler.BatchCompilerConfiguration, BatchCompiler" />
</configSections>
<BatchCompiler filesCopied="false" outputPath="" />
Я просмотрел http://www.codeproject.com/KB/dotnet/mysteriesofconfiguration.aspx, соответствующие статьи MSDN и ссылки для ConfigurationManager, а также несколько существующих вопросов, включая:
Я бы не ожидал, что мне придется написать полную реализацию пользовательского элемента для хранения данных, которые я пытаюсь сохранить.Однако, если это единственный способ убедиться, что обновленная информация записана в файл App.Config, я напишу один.Пожалуйста, посмотрите и дайте мне знать, что я пропустил.