【发布时间】: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