Изменить app.config во время установки - PullRequest
5 голосов
/ 24 апреля 2009

Как я могу динамически изменить строку подключения в файле app.config?

У меня есть приложение, написанное с использованием форм Windows, c # 3.0 и Linq to Sql. Мне нужно изменить строку подключения при установке приложения. Как мне это сделать?

Когда пользователь устанавливает программу, он должен показать форму с возможностью изменить строку подключения, если она существует, или добавить ее, если ее нет.

Ответы [ 3 ]

6 голосов
/ 24 апреля 2009

Если вы используете проект развертывания .NET, можете добиться этого с помощью пользовательских действий.

5 голосов
/ 24 апреля 2009

Напишите вторичный файл конфигурации с блоком appSettings, используя настройки из установщика. В вашем основном конфигурационном файле используйте атрибут file в appSettings для ссылки на второй конфигурационный файл, например:

<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();
        }
    }
}
0 голосов
/ 24 апреля 2009

Проверьте этот вопрос . В нем есть то, что вам нужно для динамического изменения значений в app.config с помощью кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...