1

我想知道为什么任何人(包括我自己)都费心为 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 多小时编写代码的转换可以在几秒钟内完成,没有明显的缺点

4

1 回答 1

0

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

  1. 编码需要更长的时间
  2. 需要更长的时间来编辑
  3. 为没有 xdt 经验的开发人员提供陡峭的学习曲线
  4. 在不减少重复的情况下增加代码库
于 2014-05-08T10:53:38.150 回答