从模板生成App.config
本文关键字:App config | 更新日期: 2023-09-27 18:25:58
我试图创建一个工具来为我的最终用户创建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>