我尝试使用用户连接字符串输入数据在Advanced Installer .MSI向导中构建web.config文件。
为什么这会导致文件web.config.config
增加config
,我该如何避免呢?
我猜我的开放或保存不对吗?
它是一个自定义操作,在.MSI中,我从Advanced Installer运行,但它不应该产生任何影响。
[CustomAction]
public static ActionResult EncryptConnStr(Session session)
{
try
{
var path = Path.Combine(@"C:\Users\radbyx\Documents", "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;
}
}
答案 0 :(得分:2)
此行为是由ConfigurationManager.OpenExeConfiguration
引起的,期望您提供可执行文件的路径,而不是配置文件。
要显式打开配置文件,请使用带有地图的重载:
var map = new ExeConfigurationFileMap { ExeConfigFilename = configFilePath };
configuration = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);