简单的任务,但由于某种原因还没有简单的解决方案。
我们都得到了web.config文件 - 我还没有在任何地方工作过没有问题,有人在房间里喊叫“Sh * t,我刚刚上传了错误的web.config文件”
是否有一种简单的方法可以自动生成一个web.config文件,该文件包含要复制到发布的正确内容?这些例子就是:
如果您有其他人,请告诉我,我会在此处进行更新,以便其他人轻松找到
维护2个配置文件是有效的,但这是一个很大的痛苦,而且通常是你在推送现场时出错的原因。
答案 0 :(得分:4)
Visual Studio 2010 支持这样的内容。请查看here。
答案 1 :(得分:2)
您是如何部署构建的?在我的环境中,这也是一个痛点,但现在我们使用cruisecontrol.net并编写我们的构建版本。在我们的脚本中,我们检测环境并为每个环境配置不同版本的配置设置。有关使用cruisecontrol.net进行构建管理的主题,请参阅:http://www.mattwrock.com/post/2009/10/22/The-Perfect-Build-Part-3-Continuous-Integration-with-CruiseControlnet-and-NANT-for-Visual-Studio-Projects.aspx。跳到最后,简要说明我们如何处理配置版本。
答案 2 :(得分:1)
在我最近的项目中,我编写了一个PowerShell脚本,该脚本加载了web.config文件,修改了必要的XML元素,并再次将文件保存回来。有点像这样:
param($mode, $src)
$ErrorActionPreference = "stop"
$config = [xml](Get-Content $src)
if ($mode -eq "Production")
{
$config.SelectSingleNode("/configuration/system.web/compilation").SetAttribute("debug", "false")
$config.SelectSingleNode("/configuration/system.web/customErrors").SetAttribute("mode", "off")
$config.SelectSingleNode("/configuration/system.net/mailSettings/smtp/network").SetAttribute("host", "live.mail.server")
$config.SelectSingleNode("/configuration/connectionStrings/add[@name='myConnectionString']").SetAttribute("connectionString", "Server=SQL; Database=Live")
}
elseif ($mode -eq "Testing")
{
# etc.
}
$config.Save($src)
此脚本会使用修改覆盖输入文件,但如果需要,应该很容易修改它以保存到其他文件。我有一个构建脚本,它使用Web部署项目来构建Web应用程序,将二进制文件减去源代码输出到另一个文件夹 - 然后构建脚本运行此脚本来重写web.config。结果是一个文件夹,其中包含准备放置在生产服务器上的所有文件。
答案 3 :(得分:0)
XSLT可用于生成参数化的xml文件。 Web.config是xml文件,这种方法有效。
您可以拥有一个.xslt文件(包含xpath表达式)。
然后可以有不同的xml文件 1. debug.config.xml 2. staging.config.xml 3. release.config.xml
然后在postbuild事件中或使用一些msbuild任务,xslt可以与适当的xml文件组合,以具有不同的web.config。
示例debug.config.xml文件可以是
<Application.config>
<DatabaseServer></DatabaseServerName>
<ServiceIP></ServiceIP>
</Application.config>
.xslt可以使用xpath来引用上面给出的xml。
可以查看XSLT transformation此代码可用于某些MSBuild任务或nant任务,并且可以根据输入的配置xml文件生成不同的web.config。
这样您就必须管理xml文件。
只需要管理与web.config类似的xslt文件。即每当web.config中添加任何标记时,xslt也需要更改。
答案 4 :(得分:-1)
我认为你不能100%避免这种情况。
有史以来最后几年的工作表明:人类工作的地方有失败。
所以,这里有来自我上一家公司的3个想法,不是最好的,但更好的是没有: