繁体   English   中英

在安装时更改app.config

[英]Change app.config at install time

如何动态更改app.config文件中的connectionString?

我有一个用windows表单编写的应用程序,c#3.0和Linq到Sql。 我需要在安装应用程序时更改连接字符串。 我怎么做的?

当用户安装程序时,它必须显示一个表单,如果存在,则可以选择更改连接字符串,如果不存在则添加一个。

如果您使用的是.NET部署项目,则可以使用“自定义操作”来实现此目的。

使用安装程序中的设置使用appSettings块编写辅助配置文件。 在主配置文件中,使用appSettings中的file属性引用第二个配置文件,如下所示:

<appSettings file="User.config">

辅助配置中的设置将覆盖主配置中的任何匹配键。

在安装程序中:

public override void Install(IDictionary stateSaver)
{
    base.Install(stateSaver);

    string server = Context.Parameters["Server"];
    string port = Context.Parameters["Port"];
    string targetDir = Context.Parameters["TargetDir"];
    // Build your connection string from user-input parameters and add them to dictionary

    WriteAppConfig(targetDir, server, port);
}

private void WriteAppConfig(string targetDir, string server, string port)
{
    string configFilePath = Path.Combine(targetDir, "User.config");

    IDictionary<string, string> userConfiguration = new Dictionary<string, string>();

    userConfiguration["Server"] = server;
    userConfiguration["Port"] = port;

    ConfigGenerator.WriteExternalAppConfig(configFilePath, userConfiguration);
}

public class ConfigGenerator
{
    public static void WriteExternalAppConfig(string configFilePath, IDictionary<string, string> userConfiguration)
    {
        using (XmlTextWriter xw = new XmlTextWriter(configFilePath, Encoding.UTF8))
        {
            xw.Formatting = Formatting.Indented;
            xw.Indentation = 4;
            xw.WriteStartDocument();
            xw.WriteStartElement("appSettings");

            foreach (KeyValuePair<string, string> pair in userConfiguration)
            {
                xw.WriteStartElement("add");
                xw.WriteAttributeString("key", pair.Key);
                xw.WriteAttributeString("value", pair.Value);
                xw.WriteEndElement();
            }

            xw.WriteEndElement();
            xw.WriteEndDocument();
        }
    }
}

看看这个问题 它具有通过代码动态更改app.config中的值所需的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM