如何将MSTest项目的app.config配置迁移到.NET 5并共享连接字符串
实现共享连接字符串的可行方案
方案1:共享配置文件+生成事件自动同步
该方案和你原先共享ConnectionInfo.config的逻辑完全一致,适配ASP.NET Core的配置体系:
- 在解决方案根目录创建公共配置文件,按环境命名为
SharedConnectionStrings.<环境标识>.json,统一存储各环境的连接字符串,格式和Web API项目的appsettings.json中连接字符串节点保持一致:
{ "ConnectionStrings": { "MyConnectionString": "the connection string" } }
- Web API项目和测试项目都通过添加为链接的方式引入所有公共配置文件:文件选择窗口点击「添加」按钮旁的下拉箭头,选择「添加为链接」即可,避免多份重复文件。
- 分别在两个项目的属性→生成事件→预生成事件中添加命令,根据当前选定的运行/发布环境,将对应环境的公共配置文件复制到输出目录:
copy /Y "$(SolutionDir)SharedConnectionStrings.$(ConfigurationName).json" "$(TargetDir)appsettings.shared.json"
- Web API项目在启动类中通过内置配置源加载共享配置即可,不需要额外解析逻辑:
config.AddJsonFile("appsettings.shared.json", optional: false, reloadOnChange: true);
- 测试项目直接使用ASP.NET Core内置的
ConfigurationBuilder加载输出目录下的共享配置:
var config = new ConfigurationBuilder() .AddJsonFile("appsettings.shared.json") .Build(); string connectionString = config.GetConnectionString("MyConnectionString"); _databaseManager = new DatabaseManager(connectionString);
方案2:环境变量注入(适配CI/CD场景)
如果你的环境切换通过环境变量控制,可以直接使用ASP.NET Core内置的环境变量配置优先级特性:
- 系统或启动项中设置
ASPNETCORE_ENVIRONMENT环境变量指定当前环境 - 连接字符串直接设置为环境变量,命名格式为
ConnectionStrings__MyConnectionString(双下划线为层级分隔符,内置配置系统自动识别) - Web API项目不需要额外修改,默认配置源已经包含环境变量,会自动读取
- 测试项目运行时会继承当前进程的环境变量,直接用内置
ConfigurationBuilder即可读取,不需要加载任何物理配置文件
方案3:保留原XML配置兼容旧逻辑
如果不想修改测试项目原有ConfigurationManager读取逻辑,可以继续沿用原先的ConnectionInfo.config机制:
- Web API项目通过内置的
AddXmlFile配置源直接加载ConnectionInfo.config,ASP.NET Core配置系统原生支持XML格式:
config.AddXmlFile("ConnectionInfo.config", optional: false, reloadOnChange: true);
- 后续读取连接字符串和json配置逻辑完全一致,调用
GetConnectionString("MyConnectionString")即可正常读取XML节点内容 - 测试项目原有
ConfigurationManager读取逻辑不需要任何修改,和.NET Framework下的运行表现完全一致
内容的提问来源于stack exchange,提问作者ackh
相关产品推荐
相关产品推荐

