【问题标题】:Generate App.config from template从模板生成 App.config
【发布时间】:2015-12-08 05:50:45
【问题描述】:

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

}

【问题讨论】:

  • 你得到一个全新的 app.config 是什么意思?
  • 我想创建/保存 app.config,保持模板不变。现在代码使用连接字符串创建了一个新配置,但模板中没有任何内容。

标签: c# .net app-config


【解决方案1】:

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

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>

【讨论】:

  • 它将如何处理多个连接字符串,具体取决于用户添加的数量。
  • 查看更新的答案以支持多个数据库连接。
  • 我在 File.WriteAllText 行上收到“无效的字符串格式”错误。
  • 确保您的模板文件包含我的回答中采用 {0} 格式的文本。
  • 不错!很高兴你解决了!
猜你喜欢
  • 2014-07-14
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多