我正在尝试在高级安装程序.MSI向导中构建一个 web.config 文件,其中包含用户连接字符串输入数据。
为什么这会导致文件web.config.config
带有额外的config
,我该如何避免它?
我想我的"打开"或"保存"不正确?
这是一个自定义操作,在.MSI内,我从高级安装程序运行,但我认为它应该不会产生任何影响。
[CustomAction]
public static ActionResult EncryptConnStr(Session session)
{
try
{
var path = Path.Combine(@"C:UsersradbyxDocuments", "web.config");
var connStr = BuildConnStr("foo", "foo", "foo", "foo");
Configuration config = ConfigurationManager.OpenExeConfiguration(path);
ConnectionStringsSection section = (ConnectionStringsSection)config.GetSection("connectionStrings");
section.ConnectionStrings.Add(new ConnectionStringSettings(GetConnectionStringName(), connStr));
// Encrypt
//section.SectionInformation.ProtectSection(ConnStrEncryptionKey);
// Save the configuration file.
config.Save(ConfigurationSaveMode.Modified, true);
return ActionResult.Success;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "Trace: " + ex.StackTrace, ex.Message);
throw;
}
}
此行为是由于ConfigurationManager.OpenExeConfiguration
期望您提供可执行文件的路径而不是配置文件引起的。
要显式打开配置文件,请使用采用映射的重载:
var map = new ExeConfigurationFileMap { ExeConfigFilename = configFilePath };
configuration = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);