保存到 web.config,添加额外的 "config" 扩展名

Saving to web.config, adds an extra "config" extension

我正在尝试在 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;
    }
}

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

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

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