C# 集中式连接字符串。常见的做法是什么?

C# 集中式连接字符串。常见的做法是什么?,c#,asp.net,asp.net-mvc,connection-string,C#,Asp.net,Asp.net Mvc,Connection String,我正在寻找一种集中定位两个连接字符串的方法。我们的团队有很多项目,主要是控制台应用程序,但也有一些Web API和网站。当然,这个数字还在继续增长,特别是在控制台应用程序和Web API中。我们现在需要更改所有数据库服务器和用户名/密码。我们别无选择,只能在每一个应用程序上手动操作,但接下来我们希望找到一个中心位置,这样我们就可以只更改一次文件或位置,所有应用程序都可以从那里获取设置 我一直在做一些搜索,到目前为止,我看到了使用外部配置文件、使用machine.config或web服务获取信息的

我正在寻找一种集中定位两个连接字符串的方法。我们的团队有很多项目,主要是控制台应用程序,但也有一些Web API和网站。当然,这个数字还在继续增长,特别是在控制台应用程序和Web API中。我们现在需要更改所有数据库服务器和用户名/密码。我们别无选择,只能在每一个应用程序上手动操作,但接下来我们希望找到一个中心位置,这样我们就可以只更改一次文件或位置,所有应用程序都可以从那里获取设置

我一直在做一些搜索,到目前为止,我看到了使用外部配置文件、使用machine.config或web服务获取信息的建议

使用外部文件似乎没有多大帮助,因为如果需要更改,即使是外部文件,也必须更改所有应用程序上的文件

理论上,machine.config现在对我来说似乎是合乎逻辑的。您只需将连接信息放在机器级别,任何应用程序、网站或Web API都应该能够获取它。然而,我看到很多讨论,人们都在劝阻这种做法。此外,我正试图让我的代码从machine.config中提取连接信息,但目前还无法让它工作


那么,有什么建议?有谁对使用machine.config、外部文件或Web服务来存储连接字符串信息有实际的赞成/反对意见吗

最简单的方法是使用将配置文件保存在单个项目中,并将该配置文件作为“”添加到其他项目中

您还可以将应用程序配置中的连接字符串保存在单独的配置文件中。并在单独的配置文件中使用连接字符串的引用。这是更具体的解决办法

<configuration>
    <connectionStrings configSource="connections.config"/> 
</configuration>

最简单的方法是使用将配置文件保存在单个项目中,并将该配置文件作为“”添加到其他项目中

您还可以将应用程序配置中的连接字符串保存在单独的配置文件中。并在单独的配置文件中使用连接字符串的引用。这是更具体的解决办法

<configuration>
    <connectionStrings configSource="connections.config"/> 
</configuration>

为此创建一个单独的类库,将连接字符串作为属性添加到类文件中。然后,您可以在任何需要数据库连接字符串的应用程序中始终引用此库


从属性值检索代码中的连接字符串。但是,使用这种方法,如果进行任何更改,您将始终必须重新编译代码。

为此目的创建一个单独的类库,将连接字符串作为属性添加到类文件中。然后,您可以在任何需要数据库连接字符串的应用程序中始终引用此库


从属性值检索代码中的连接字符串。然而,使用这种方法,如果您进行任何更改,您总是需要重新编译代码。

添加为链接看起来是个不错的概念。我会尝试测试一些,但目前我不知道你会把配置项目放在哪里。换句话说,当我将文件添加为共享链接时,我是将其指向本地文件还是指向生产服务器上的文件?或者,引用是否更虚拟,因此我需要指向我的开发机器上的文件夹结构中的一个文件,该文件模仿生产机器,以便在prod中发布后,它将显示在相同的位置?您只需要将它们保留在本地解决方案中。您可以将它们放置在共享项目中(如果已经存在),也可以将它们作为解决方案项保留。如果使用第二种方法,则物理位置应位于同一解决方案层次结构中。此外,生成/发布过程应将配置文件复制到生成文件夹中。在生产中,这些文件在您的解决方案中的位置无关紧要。我认为这将非常有效。我在我的开发机器和测试服务器上创建了一个文件夹结构(d:\inetpub\config\connections.config)。然后我做了addas链接,并指向那个配置文件。我添加了configSouce=“connections.config”我的配置文件,就像您发布的代码一样。看来这会成功的。现在,如果有什么变化,我只需在所有服务器上的d:\inetub\config\connections.config文件中进行更新。谢谢你的代码!就在我认为自己擅长这一点的时候,我遇到了一个问题。我的假设是,如果我们指向一个共享文件,它会查看共享文件的位置并从那里提取值。但是,它所做的一切似乎都是在创建共享文件后将其复制到项目中。因此,假设我创建了共享文件,然后添加或更改其中一个值。这并没有反映出代码中的变化。它将具有旧值和/或无法找到新值。糟糕!谢谢你的帮助,“添加为链接”看起来是个不错的概念。我会尝试测试一些,但目前我不知道你会把配置项目放在哪里。换句话说,当我将文件添加为共享链接时,我是将其指向本地文件还是指向生产服务器上的文件?或者,引用是否更虚拟,因此我需要指向我的开发机器上的文件夹结构中的一个文件,该文件模仿生产机器,以便在prod中发布后,它将显示在相同的位置?您只需要将它们保留在本地解决方案中。您可以将它们放置在共享项目中(如果已经存在),也可以将它们作为解决方案项保留。如果使用第二种方法,则物理位置应位于同一解决方案层次结构中。此外,生成/发布过程应将配置文件复制到生成文件夹中。在生产中,这些文件在哪里并不重要