条件ConnectionString基于应用程序发布到的文件夹

时间:2009-10-01 13:13:45

标签: asp.net iis-7 connection-string

我正在进入并行测试和开发阶段,我需要使用一个数据库进行测试,而另一个数据库用于开发。如何让应用程序根据它(应用程序)所在的物理文件夹选择要实现的连接字符串?

我知道有一些SVN策略要考虑,但这是小规模的,足以避免2个特定的代码库。希望能够将同一个VS项目发布到我的2个目录中,而不必提醒自己更改连接字符串。

我在IIS7下运行,所以它可能提供比(和覆盖)web.config中的条件更好的控制。 (或不)

thankx!

4 个答案:

答案 0 :(得分:2)

一条忠告:

我不会将您的连接字符串基于您发布的文件夹。在路上,文件夹可能会更改,人们可能不知道这确定了您正在使用的连接字符串。

而是使用web.config文件中的设置来控制它。只需添加一个允许您在生产和开发数据库之间切换的设置。实际上,您只需测试调试模式设置的 presence 即可。如果有那个设置,那么你的目标是开发数据库;否则,你的目标是生产。

该解决方案的优点在于它不依赖于部署站点的 where ,您可以在Web.config文件中记录该设置。

希望这有帮助。

编辑清晰度:“调试模式设置”我的意思是一个设置,用于确定您要定位的数据库,开发/生产。不是您的应用程序是否在调试模式下运行,因为Framework已经提供了一个执行该操作的功能。此外,您不一定会删除该设置,因为您希望将其保留用于文档目的。相反,你会评论它。

答案 1 :(得分:0)

你可以,例如创建一个<connectionStrings>容器,其中包含应用可能位于的每个文件夹的连接字符串:

<connectionStrings>
  <add name="Folder1" connectionString=".....(conn str. #1)...:" />
  <add name="Folder2" connectionString=".....(conn str. #2)...:" />
  ....
  <add name="Folder-n" connectionString=".....(conn str. #n)...:" />
</connectionStrings>

然后选择正确的一个,具体取决于您的应用从哪里开始。

马克

答案 2 :(得分:0)

获取应用程序的唯一字符串,可能类似于:

string folder = Regex.Match(Server.MapPath("~"), @"\(.+?)\$").Groups[0].Value;

然后使用该字符串从web.config中获取值:

ConnectionStringSetting connectionString = ConfigurationManager.ConnectionStrings["ConnectionString." + folder] ?? ConfigurationManager.ConnectionStrings["ConnectionString"];

在web.config中,您可以添加多个连接字符串,其中每个开发站点都附加了文件夹名称,以及一个只包含名称且没有文件夹的默认连接字符串。

答案 3 :(得分:0)

我通常将连接字符串放入单独的配置文件中,并使用configSource从主web.config引用它们:

web.config

<?xml version="1.0"?>
<configuration>
    <!-- connection strings are located in an external config 
     file to facilitate deployment in various environments -->
    <connectionStrings configSource="connections.config"></connectionStrings> 
</configuration>

connections.config

<?xml version="1.0"?>
<connectionStrings>
    <add name="ConnectionName" connectionString="[your connection string]"/>
</connectionStrings>

部署后,我通常会从未来的部署中排除connections.config(除非应该更改,否则)。