从模板生成App.config

时间:2015-12-07 20:02:50

标签: c# .net app-config

我尝试创建工具来为我的最终用户创建app.config文件。

所有工具都是创建连接字符串并将它们添加到我已经拥有的模板app.config中,但我似乎无法将连接字符串保存到我的模板中。相反,我得到一个完全不同的app.config。

我已经读过将序列序列化为XML对象并将其保存为XML文档,但是当我想要的是插入连接字符串时,需要映射大量的配置文件。

这是我的代码:

public Configuration CreateConfiguration(List<DatabaseConfig> databaseList)
{   
            var configurationPath = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, @"Resources\MyApplication.template.config");
        if (!File.Exists(configurationPath)) return null;

        //Open the app.config for modification
        var config = ConfigurationManager.OpenExeConfiguration(configurationPath);

        foreach (var database in databaseList)
        {
            //Retreive connection string setting
            var connectionString = config.ConnectionStrings.ConnectionStrings[database.Name];
            if (connectionString == null)
            {
                //Create connection string if it doesn't exist
                config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings
                {
                    Name = database.Name,
                    ConnectionString = database.ConnectionString,
                    ProviderName = "System.Data.SqlClient"
                });
            }
            else
            {
                //Only modify the connection string if it does exist
                connectionString.ConnectionString = database.ConnectionString;
            }
        }

        config.Save(ConfigurationSaveMode.Minimal);
        //config.Save(ConfigurationSaveMode.Full);

        // Display Folder Dialog (User chooses save location)
        var folderBrowserDialog = new FolderBrowserDialog();
        DialogResult result = folderBrowserDialog.ShowDialog();

        if (result == DialogResult.OK)
        {
            var filePath = Path.Combine(folderBrowserDialog.SelectedPath, @"MyApplication.exe.config");
            config.SaveAs(filePath);
        }

}

1 个答案:

答案 0 :(得分:0)

我会使用正则表达式或简单的字符串格式来替换模板文件中的连接字符串并将其另存为新文件。

var builder = new StringBuilder();
foreach (var database in databaseList)
{   
    builder.AppendFormat("<add name=\"{0}\" connectionString=\"{1}\" providerName=\"{2}\" />\n", database.name, database.connection, database.provider);
}
var templateContents = File.ReadAllText(templatePath);
var configContents = string.Format(templateContents, builder.ToString());
File.WriteAllText(configPath, configContents);

在模板文件中,您只需将以下内容放在连接字符串的位置即可。

<connectionStrings>
    {0}
</connectionStrings>