关于C#:将数据库设置存储在app.config外部

Storing database settings outside app.config

我一直在编写将在实时Web服务器上运行的c#exe,但是我希望能够在我们的登台服务器上对其进行测试。 由于登台服务器与本地主机具有不同的数据库设置(在app.config中),是否可以通过任何方法将连接字符串存储在app.config之外,以便轻松访问?

另外,是否可以存储数据库连接字符串,然后通过app.config访问它? 这听起来可能很奇怪,但是我正在使用CMS中的dll,该dll使用.config文件中的值。


在每个位置使用不同的app.config怎么样?


您可以将任何.NET配置节"外部化"到单独的文件中,并从app.config引用它。

因此,在您的情况下,您在app.config中将具有以下内容:

1
<connectionStrings configSource="connectionstrings.dev.config" />

然后为例如创建单独的配置DEV,TEST,PROD环境,名称不同。他们的内容将是:

1
2
3
4
<?xml version="1.0"?>
<connectionStrings>
   -- your connection string here, as normal
</connectionStrings>

您可以使用任意数量的这些独立文件,并且切换仅意味着更改主app.config中的一行以引用适当的外部connectionstrings.ABC.config文件。


取而代之的是,如何在app.config中创建带有前缀的数据库设置,例如DevConnectionStringProdConnectionString。然后,再创建一个app.config元素,告诉您所处的环境。

在开发过程中,该环境设置为" Dev"。
部署代码时,将app.config中的环境元素更改为" Prod"。

当您想用代码检索数据库设置时,首先要检查环境值,然后相应地选择数据库设置。

此主题的一种变体是在每台计算机的Windows中创建一个环境变量,并在您的代码中查询该变量。


您可以为连接字符串滚动自己的配置,在适合当前环境的情况下调用它,例如dev.config,qa.config,prod.config等,并将其名称保留到App.config中。

此外,您可以将记录添加到Machine.config中,例如称为Environment并在阅读App.config以确定环境配置时考虑它,即:

Machine.config:

1
<environment name="Dev" />

App.config:

1
2
3
4
5
<environments>
    <environment name="Dev" config="dev.config" />
    <environment name="QA" config="qa.config" />
    ...
</environments>

这取决于您如何使用它。它只是一个字符串,因此基本上您可以将其存储在所需的任何位置,但是如果您使用的某个库希望连接字符串位于app.config中,则您将不得不寻找一种不同的方式来向它提供字符串。

但是app.config文件很容易获得。它只是XML格式的文本文件,因此您可以使用任何文本编辑器进行编辑,例如记事本。但是,它在部署后没有命名为app.config,而是从应用程序名称中获取其文件名,扩展名为.config


您可以将其存储在所需的位置:在文本文件的环境变量中,将其作为命令行参数传递。

您只需要编写代码即可读取连接字符串并将其传递给您的dataaccess。

当您告诉我们如何访问数据库时,我可以向您展示如何传递连接字符串。

但是在每个环境中使用不同的配置文件可能更好。