C# 在app.config外部存储数据库设置

C# 在app.config外部存储数据库设置,c#,app-config,application-settings,C#,App Config,Application Settings,我一直在编写一个c#exe,它将在一个实时web服务器上运行,但我希望能够在我们的暂存服务器上测试它。由于暂存服务器的数据库设置(在app.config中)与我的本地主机不同,是否有任何方法可以将连接字符串存储在app.config之外,以便轻松访问它 另外,是否可以存储数据库连接字符串,然后通过app.config访问它?这听起来可能有些奇怪,但我使用的是CMS中的dll,它使用.config文件中的值。在每个位置使用不同的app.config如何?您可以将其存储在需要的位置:在文本文件中,在

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


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

在每个位置使用不同的app.config如何?

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

您只需编写代码来读取连接字符串并将其传递给dataaccess

当您告诉我们如何访问数据库时,我可以告诉您如何传递connectionstring


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

这取决于您如何使用它。它只是一个字符串,所以基本上你可以将它存储在任何你喜欢的地方,但是如果你使用的库希望连接字符串在app.config中,那么你必须找到一种不同的方式来为它提供字符串


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

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

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

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


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

您可以滚动自己的连接字符串配置,根据当前环境调用它,例如dev.config、qa.config、prod.config等,并将其名称保留在App.config中

此外,您可以向Machine.config添加一个记录,例如被调用的环境,并在读App.CONFIG上考虑它来确定环境配置,即:

Machine.config:

<environment name="Dev" />

App.config:

<environments>
    <environment name="Dev" config="dev.config" />
    <environment name="QA" config="qa.config" />
    ...
</environments>

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

因此,在您的情况下,在
app.config
中会有类似的内容:

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

然后使用不同的名称为开发、测试、产品环境等创建单独的配置。其内容将是:

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

--您的连接字符串在这里,正常情况下

您可以选择任意数量的独立文件,切换只意味着更改主
app.config
中的一行,以引用相应的外部
connectionString.ABC.config
文件。

为什么不为每个环境设置不同的app.config文件?这基本上就是配置文件的要点,用于提供该环境所需的设置。是否可以将app.config存储在.exe之外?当我完成构建(TFS)时,似乎没有像web.config那样的app.config。这是我通常做的。为了避免错误,请使用不同的名称在源代码管理中维护这两个配置文件,并将其放置在您正在部署的文件之外的位置,这样您的部署脚本就可以在更新过程中自动安装正确的配置文件。好的,我的app.config配置设置指向另一个文件。是否可以在运行app.config的每台机器上更改app.config,而不为每台机器重新构建一次app?