编码现有web.configs的转换文件(重新发明轮子?)

时间:2014-02-11 08:38:30

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

我想知道为什么任何人(包括我自己)都难以为web.config文件中的每个键创建疯狂冗长乏味的xdt转换,只需在配置声明旁边添加“Replace”语句即可。

让我用一个例子来解释:

您是一名开发人员,其任务是为大型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.config创建变换的开发人员,那么与上述方法相比,执行以下操作并不容易:

Base 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个多小时才能在几秒钟内完成代码,没有明显的缺点

1 个答案:

答案 0 :(得分:0)

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

  1. 需要更长的代码
  2. 需要更长时间才能修改
  3. 对于没有xdt经验的开发人员而言,学习曲线清晰。
  4. 增加代码库而不减少重复