首页 > 解决方案 > 如何在 app.config 中转换连接字符串

问题描述

我正在为 3 年前创建的一个相当大的项目开发 CI/CD 管道,它是一个 asp.net core 2.1 (.NET Framework) 项目。此项目将连接字符串存储在 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 config,这个项目使用的是 app.config,因为 asp.net core .NET 框架只在发布时创建 web.config。我知道我可以使用 appsetting.json 来转换不同的 ENV,但它需要更改代码,最糟糕的是这个项目正在通过 nuget 引用另一个项目,该项目也在 app.config 中使用连接字符串。有什么解决方法吗?

标签: asp.net-coretfstfsbuildmsdeploy

解决方案


我使用代码打击在运行时更改 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");

推荐阅读