【问题标题】:Coding transform files for existing web.configs (Reinventing the wheel?)为现有 web.configs 编码转换文件(重新发明轮子?)
【发布时间】:2023-03-14 21:35:01
【问题描述】:

我想知道为什么有人(包括我自己)费心为 web.config 文件中的每个键创建极其冗长而乏味的 xdt 转换,而我们可以简单地将“替换”语句放在配置声明旁边。

让我用一个例子来解释:

您是一名开发人员,负责为大型 Web 应用程序创建一系列 web.config 转换。

你会得到每个环境的 web.configs 并被告知要制作:

  • 一个基本的 web.config,其中包含每个通用的所有键和值 环境
  • 包含因环境而异的所有键和值的转换文件集

这是一个示例基础 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
    <add key="db.schema" value="app" />
    <add key="versionNumber" value="" />
    <add key="culture" value="en-US" />
    <add key="url" value="" />
    <add key="cache.Duration" value="0" />
</appSettings>
</configuration>

这是基本 web.config 的示例转换:

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="versionNumber"
     value="01.67.00"
     xdt:Transform="Replace" xdt:Locator="Match(key)"/>
<add key="url"
     value="http://thisIsNotAnActualURL.com"
     xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>

根据需要输出以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
    <add key="db.schema" value="app" />
    <add key="versionNumber" value="01.67.00" />
    <add key="culture" value="en-US" />
    <add key="url" value="http://thisIsNotAnActualURL.com" />
    <add key="cache.Duration" value="0" />
</appSettings>
</configuration>



这一切都很好,但如果您是一名开发人员,正在基于已经存在的大量 web.configs 创建转换,那么与上述方法相比,执行以下操作会不会容易得多:

基础 web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>

变换:

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace">
<appSettings>
    <add key="db.schema" value="app" />
    <add key="versionNumber" value="01.67.00" />
    <add key="culture" value="en-US" />
    <add key="url" value="http://thisIsNotAnActualURL.com" />
    <add key="cache.Duration" value="0" />
</appSettings>

结果与前面的示例相同,所涉及的工作要少得多:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
    <add key="db.schema" value="app" />
    <add key="versionNumber" value="01.67.00" />
    <add key="culture" value="en-US" />
    <add key="url" value="http://thisIsNotAnActualURL.com" />
    <add key="cache.Duration" value="0" />
</appSettings>
</configuration>

我明白,通过使用这种方法,当每个环境都需要发生变化时,变化需要反映在每个转换中;但除此之外,我看不出任何缺点。

请告诉我,我在这里遗漏了一些明显的东西,因为我发现花了我 8 多小时编写代码的转换可以在几秒钟内完成,没有明显的缺点

【问题讨论】:

  • 为什么你需要不止一个缺点?您已经确定重复是一个问题。
  • 因为我现在的做法有几个缺点,我也已经发现了
  • 这听起来可能有点闷,但我个人更喜欢“几乎不可能默默地搞砸”而不是“更短”。虽然我对自己确保所有文件都更新的能力充满信心,但我对新员工在 3 个月内上任以确保项目不会出错没有信心。如果其中一个adds 打错了,配置文件会以未修改的值出现,直到服务器开始做一些奇怪的事情之前没人知道......
  • 我不确定我是否正确理解你的意思,你能解释一下为什么“几乎不可能默默地搞砸”的方法几乎不可能默默地搞砸吗?如果在您的首选方法中添加“错字”,您将如何在问题发送到服务器之前准确地看到问题?应用转换后该值仍不会修改此外,如果 web.config 进入服务器后存在错误,那么不会有两个可能的地方来检查错误而不是一个? (掌握和转换,而不是仅仅转换)

标签: asp.net web-config transformation web-config-transform xdt-transform


【解决方案1】:

推测是我在这里得到建议的基础,我们确实决定使用“更短”的转换方法,因为官方方法存在以下问题:

  1. 编码需要更长的时间
  2. 编辑需要更长的时间
  3. 对于没有使用 xdt 经验的开发人员来说,学习曲线非常快
  4. 增加代码库而不减少重复

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 2022-01-10
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多