我收集了一份(希望有用的)总结,总结了我为完成这篇文章的主题而进行的研究,以及我遇到的问题。请告诉我您是否找到了您更喜欢的其他方法,特别是如果它们解决了我提到的方法没有解决的问题。
将连接字符串保留在 web.config 中,并使用 XDT/msdeploy 转换根据我的活动构建配置(例如,web.PublicTest.config 文件)将它们替换为设置。我的问题是我将一些特定于服务器的设置合并并隐藏到一个具有许多配置元素的全局相同文件中。此外,我无法在多个对等级应用程序之间共享连接字符串定义。
为 web.config 中的连接字符串指定一个 configSource="DeveloperLocalConnectionStrings.config" 值,然后 XDT 将此值转换为指向我的代码库中的多个特定于环境的文件之一。我的问题是我将所有环境的密码发送到所有目的地(当然,除了 SVN),并且在服务器上等待意外使用的未使用的配置部分。
machine.config 文件中的特定连接字符串,而不是 web.config。问题:谁希望在 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 期间修改生产数据库。(更新:我发现在这种情况下我不能使用一键发布,只能使用带有 -skip 参数的 msdeploy 命令行。如上排除文件与将其设置为“无”编译操作而不是“内容”,并导致包将其从部署目标中删除。)
如果尚未设置连接字符串,请将部署包连接起来以提示输入连接字符串(我还不知道如何执行此操作,但我知道这是可能的)。这将产生与上述#4 类似的结果。
指定 configSource="..\ConnectionStrings.config"。非常适合我的需求,因为我可以在我选择的应用程序之间共享配置,并且我的应用程序目录中不会有任何特定于机器的内容。不幸的是,此属性中不允许使用父路径(就像它们用于 'appSettings file=""' - 另请注意,您可以在 configSource= 参考中大量使用 file=)。
ps 这里讨论了其中一些解决方案:ASP.Net 配置文件 -> 多个开发人员和部署服务器的连接字符串