虽然这个问题已有一年多的历史,但我认为对于任何希望在项目文件夹的 app.config 等之外引用连接字符串的 Windows 桌面编码人员来说,最新的答案都会很有用。这对于共享 1 很有用多个项目的配置文件,只需更改 1 个集中文件中的连接字符串。
告诉 App.Config 为连接字符串使用不同的文件的基本原理很简单;但是,.NET 似乎 NOT 能够解析此外部文件,如果它是在项目的根文件夹中的 NOT 或该项目中的子文件夹。让我们看一下最基本的例子:
在项目的 App.config 中,<configuration> 标签内,使用下面的代码('configSource' 指向另一个文件来读取连接字符串):
<configuration>
<connectionStrings configSource="ExternalConnectionStrings.config"/>
</configuration>
创建ExternalConnectionStrings.config,代码如下:
<connectionStrings>
<clear/>
<add name = "ConnString1"
connectionString = "Server=myServer;Trusted_Connection=True;Database=myDB;Persist Security Info=false"/>
<add name = "ConnString2"
connectionString = "Server=tcp:azureserver.database.windows.net,1433;Database=AzureDB;User ID=**;Password=**;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Persist Security Info=false"/>
</connectionStrings>
将此配置文件保存在与项目的App.config 相同的文件夹中,并将此文件的属性标记为“复制到输出目录”或“如果较新则复制”。
这是从App.config 以外的其他文件引用连接字符串的“教科书”方式。但是,这可能没那么有用:如何将此外部文件放在与项目文件夹完全不同的文件夹中?
为此,请将相同的ExternalConnectionStrings.config 复制到项目或解决方案文件夹OUTSIDE 的文件夹中,例如。 C:\ConnectionStringsFolder\。从我们之前复制/创建的项目文件夹中删除此配置文件(否则以下说明将不起作用)。
保持App.config 不变(确保项目文件夹中不存在ExternalConnectionStrings.config)。使用 Windows mklink 命令将 ExternalConnectionStrings.config 关联到外部文件夹,使用以下命令提示符命令:
mklink ExternalConnectionStrings.config C:\ConnectionStringsFolder\ExternalConnectionStrings.config
Windows 应该返回一个“为...创建的符号链接”;确保您没有在 app.config 所在的项目文件夹中存在该特定配置文件。
您应该会看到ExternalConnectionStrings.config 列在例如。视觉工作室;确保将其标记为复制到输出文件夹(我使用“如果较新则复制”,它将在项目重建后获取对外部配置文件的任何更改ONLY)。
这回答了 Matt Spinks 的问题 1;对于问题 2,以下方法将返回在外部文件中找到的所有连接字符串(如 App.config 所指):
using System.Diagnostics;
using System.Configuration;
static void GetConnectionStrings()
{
ConnectionStringSettingsCollection cStringsSettings = ConfigurationManager.ConnectionStrings;
if (cStringsSettings != null)
{
foreach (ConnectionStringSettings cstrings in cStringsSettings)
{
Debug.WriteLine(cstrings.Name);
Debug.WriteLine(cstrings.ConnectionString);
}
}
}
这目前在 Visual Studio 2019 中运行,在 Windows 10 上使用 .NET Core 3.1,一个 WPF 应用程序。