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