如何读取app.config中所有连接字符串并加密保存至配置文件?
控制台连接字符串加密工具实现方案
刚好碰到过类似的TFS构建场景,给你整理了一个完整的C#实现,能自动处理任意名称的connectionStrings,完美适配你的需求:
核心实现步骤
- 解析命令行传入的app.config路径和密钥两个参数
- 加载目标配置文件,定位到
<connectionStrings>节点 - 遍历所有
<add>节点,对每个connectionString值执行加密(这里假设你已经有现成的加密方法EncryptConnectionString,如果需要调整加密逻辑直接替换即可) - 将加密后的内容写回原配置文件,保持其他节点不变
完整代码示例
using System; using System.Configuration; namespace ConnectionStringEncryptor { class Program { static void Main(string[] args) { // 验证命令行参数数量 if (args.Length != 2) { Console.WriteLine("用法:EncryptConnStrings.exe <app.config路径> <加密密钥>"); Console.WriteLine("示例:EncryptConnStrings.exe \"C:\\MyProject\\app.config\" \"MyStrongPasskey123\""); return; } string configPath = args[0]; string passkey = args[1]; try { // 加载配置文件(打开可写模式) var config = ConfigurationManager.OpenExeConfiguration(configPath); var connectionStringsSection = config.ConnectionStrings; if (connectionStringsSection == null || connectionStringsSection.ConnectionStrings.Count == 0) { Console.WriteLine("配置文件中未找到connectionStrings节点或节点为空"); return; } // 遍历所有连接字符串并加密 foreach (ConnectionStringSettings connSetting in connectionStringsSection.ConnectionStrings) { // 跳过系统默认连接字符串(比如LocalSqlServer) if (connSetting.Name == "LocalSqlServer" && string.IsNullOrEmpty(connSetting.ConnectionString)) continue; // 执行加密(替换成你已实现的加密逻辑) string encryptedConnStr = EncryptConnectionString(connSetting.ConnectionString, passkey); connSetting.ConnectionString = encryptedConnStr; Console.WriteLine($"已加密连接字符串:{connSetting.Name}"); } // 保存修改后的配置文件 config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("connectionStrings"); Console.WriteLine("所有连接字符串加密完成,已保存回原配置文件"); } catch (Exception ex) { Console.WriteLine($"执行出错:{ex.Message}"); Environment.Exit(1); // 返回错误码给TFS构建服务器 } } // 这里替换成你已实现的加密逻辑 private static string EncryptConnectionString(string plainText, string passkey) { // 示例加密逻辑(实际请替换为你的加密实现) // 比如使用AES、RSA或者DPAPI(如果是同一服务器运行的话) return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes($"{plainText}:{passkey}")); } } }
使用说明
- 将代码编译成控制台程序(比如
EncryptConnStrings.exe) - 在TFS构建任务中添加命令行执行步骤,传入两个参数:
(注意路径要根据你的项目结构调整)EncryptConnStrings.exe "$(Build.SourcesDirectory)\MyApp\app.config" "YourSecurePasskeyHere"
关键注意事项
- 权限问题:确保TFS构建服务器的运行账号对目标app.config文件有读写权限,否则会保存失败
- 加密一致性:加密逻辑必须和你项目中解密连接字符串的逻辑完全匹配,否则程序运行时无法正常读取
- 重复加密判断:如果需要避免重复加密,可以在
EncryptConnectionString方法中添加判断逻辑,比如检查字符串是否已经是加密后的格式(比如是否以特定前缀开头) - 系统连接字符串:代码中跳过了默认的
LocalSqlServer空连接字符串,你可以根据需要调整这个过滤规则
内容的提问来源于stack exchange,提问作者mortenstarck
相关产品推荐
相关产品推荐

