Sha*_*non 5 asp.net deployment connection-string web-config msdeploy
我已经收集了一份(希望有用的)总结我已经研究过的方法来完成这篇文章的主题,以及我遇到的问题.请告诉我你是否找到了其他你喜欢的方式,特别是如果他们解决了我提到的方法没有的问题.
在web.config中保留连接字符串,并使用XDT/msdeploy转换根据我的活动构建配置(例如,web.PublicTest.config文件)将其替换为设置.我的问题是我合并并将一些特定于服务器的设置埋入具有许多配置元素的全局相同的文件中.此外,我无法在多个对等级应用程序之间共享连接字符串定义.
为web.config中的连接字符串指定configSource ="DeveloperLocalConnectionStrings.config"值,XDT将此值转换为指向我的代码库中多个特定于环境的文件之一.我的问题是我将所有环境的密码发送到所有目的地(当然还有SVN),并且未使用的配置部分位于等待意外使用的服务器上.
machine.config文件中的特定连接字符串而不是web.config.问题:heck期望在machine.config中找到连接字符串的人,以及因此导致意外名称冲突的可能性很高.
指定configSource ="LocalConnectionStrings.config",不要转换值,并编辑项目xml以排除连接字符串配置的部署.http://msdn.microsoft.com/en-us/library/ee942158.aspx#can_i_exclude_specific_files_or_folders_from_deployment - 这是我发现的最好的解决方案,以满足我对专有(非分布式)Web应用程序的需求,但我很偏执,另一个团队成员有一天会来复制生产网站进行测试,出于某种原因,瞧!现在正在UAT期间修改生产数据库.(更新:我发现在这种情况下我不能使用一键发布,只有msdeploy命令行和-skip参数.如上所述排除文件与将其设置为"无"编译操作相同,而不是"内容",并导致包从部署目标中删除它.)
连接部署包以提示连接字符串(如果尚未设置)(我不知道如何执行此操作但我知道这是可能的).这将与上面的#4类似.
指定configSource ="..\ConnectionStrings.config".对我的需求很有用,因为我可以在我选择的应用程序之间共享配置,并且在我的应用程序目录中没有任何特定于机器的东西.不幸的是,在这个属性中不允许使用父路径(就像它们用于'appSettings file =""' - 请注意,你可以在configSource = reference中使用file = spiffily).
ps这里讨论了一些这样的解决方案:ASP.Net配置文件 - >多个开发人员和部署服务器的连接字符串
使用主机名作为连接字符串的键,这样您就可以自动选择数据源。确保选择例程没有错误(更改主机名 - 测试!)...
不要把它放在web.config中,写一个ini文件,这样就没有XML编码。
使用私钥/公钥 (RSA/PGP) 加密其中的密码。永远不要使用明文或对称密钥,这同样糟糕。