如何转换 app.config 中的连接字符串

How to transform connection strings in app.config

我正在为 3 年前创建的一个相当大的项目开发 CI/CD 管道,它是一个 asp.net 核心 2.1(.NET 框架)项目。该项目将连接字符串存储在 EF 6 的 app.config 文件中。 我试图为此项目创建 Web 部署包,但 VS 无法检测到 app.config 中的连接字符串,我已尝试创建自定义 Parameters.xml 文件

<parameter name="OptagEntities-app.config Connection String" description="doesn't matter" defaultvalue="__OptagEntities__" tags="">
      <parameterentry kind="XmlFile" scope="\app.config$" match="/configuration/connectionStrings/add[@name='OptagEntities']/@connectionString">
</parameterentry>

我已尝试将此项目部署到本地 IIS,我可以看到连接字符串未根据 SetParameters.xml 文件中的值进行更新。我们有内部部署的 TFS 服务器,同样的流程适用于 webform 项目。不同的是 Web 配置,这个项目使用 app.config,因为 asp.net 核心 .NET 框架只在发布时创建 web.config。 我知道我可以使用 appsetting.json 来转换不同的 ENV,但它需要更改代码,最糟糕的是该项目正在通过 nuget 引用另一个项目,该项目也在 app.config 中使用连接字符串。 有什么解决办法吗?

我使用代码 blow 在运行时更改 EF6 连接字符串,"myConnectionStrings" 可以从 appsettings.json

加载
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
connectionStringsSection.ConnectionStrings["Entities"].ConnectionString = "myConnectionStrings";
config.Save();
ConfigurationManager.RefreshSection("connectionStrings");