ASP.NET 和 Visual Studio 2019:如果 Web.config 中有 configSource,如何设置 Web.Debug 和 Web.Release?

ASP.NET and Visual Studio 2019: how to set up Web.Debug and Web.Release if you have configSource in Web.config?

在我的 ASP.NET 网络表单中,这是我的 Web.config 文件中的连接字符串:

<connectionStrings configSource="MySecrets.config"/>

我知道我可以使用 Web.Debug 和 Web.Release 来更改连接字符串,以便在发布 Web 应用程序时不会暴露它们。

然而,Visual Studio提供的例子提到:

In the example below, the "SetAttributes" transform will change the value of 
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
finds an attribute "name" that has a value of "MyDB".

<connectionStrings>
  <add name="MyDB" 
    connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

但是,这引用了 Web.config 文件中的一个 <connectionStrings> 部分,我一开始就没有,因为在我的项目中我有:

<connectionStrings configSource="MySecrets.config"

如何设置 Web.Release 来替换 MySecrets.config 文件,使其在发布后不可见?

使用预处理器在连接字符串之间切换,为此您应该同时拥有两个连接字符串。

web.config

<connectionStrings>
    <add name="Project.Properties.Settings.ConnString_A" connectionString="" providerName="System.Data.SqlClient" />
    <add name="Project.Properties.Settings.ConnString_B" connectionString="" providerName="System.Data.SqlClient" />
</connectionStrings>

代码隐藏

public SqlConnection conn { get; set; }
public DbContext()
{
#if DEBUG
    conn = new SqlConnection(Properties.Settings.Default.ConnString_A);
#else
    conn = new SqlConnection(Properties.Settings.Default.ConnString_B);
#endif
}

参考:#if (C# Reference)