web.config - 自动生成发布版本

时间:2009-11-03 12:58:48

标签: asp.net debugging release web-config

简单的任务,但由于某种原因还没有简单的解决方案。

我们都得到了web.config文件 - 我还没有在任何地方工作过没有问题,有人在房间里喊叫“Sh * t,我刚刚上传了错误的web.config文件”

是否有一种简单的方法可以自动生成一个web.config文件,该文件包含要复制到发布的正确内容?这些例子就是:

  • 交换连接字符串以使用实时数据库
  • 更改
  • 切换到使用实时/发布日志系统,以及实时/发布安全设置
  • (在我们的例子中,我们需要从StateServer将SessionState模式更改为InProc - 这不正常)

如果您有其他人,请告诉我,我会在此处进行更新,以便其他人轻松找到

维护2个配置文件是有效的,但这是一个很大的痛苦,而且通常是你在推送现场时出错的原因。

5 个答案:

答案 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个想法,不是最好的,但更好的是没有:

  1. 编写批处理文件或在双击
  2. 上更改web.config的C#.Net应用程序
  3. 写一个“ToDo on Release”-List
  4. 配对 - 重新定位(==在realease中配对编程:))