我正在进入并行测试和开发阶段,我需要使用一个数据库进行测试,而另一个数据库用于开发。如何让应用程序根据它(应用程序)所在的物理文件夹选择要实现的连接字符串?
我知道有一些SVN策略要考虑,但这是小规模的,足以避免2个特定的代码库。希望能够将同一个VS项目发布到我的2个目录中,而不必提醒自己更改连接字符串。
我在IIS7下运行,所以它可能提供比(和覆盖)web.config中的条件更好的控制。 (或不)
thankx!
答案 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
(除非应该更改,否则)。