从模板生成 App.config

Generate App.config from template

我正在尝试创建工具来为我的最终用户创建 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);
        }

}

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

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>