保存到web.config,添加额外的" config"延期

时间:2017-08-14 10:04:14

标签: c# path connection-string configurationmanager advanced-installer

我尝试使用用户连接字符串输入数据在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;
    }
}

1 个答案:

答案 0 :(得分:2)

此行为是由ConfigurationManager.OpenExeConfiguration引起的,期望您提供可执行文件的路径,而不是配置文件。

要显式打开配置文件,请使用带有地图的重载:

var map = new ExeConfigurationFileMap { ExeConfigFilename = configFilePath };
configuration = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);