当目标配置文件的结构未知时,如何处理深度XDT变换?

时间:2013-08-13 19:11:18

标签: xml nuget web-config-transform xdt-transform

我正在尝试使用XDT Transforms为我的NuGet包创建一个web.config安装程序。

我想转换web.config文件:

<configuration>
    <system.web>
    </system.web>
</configuration>

看起来像这样:

<configuration>
    <system.web>
        <httpHandlers>
            <add path="*." verb="*" type="CustomHandler" />
        </httpHandlers>
    </system.web>
</configuration>

以下是我尝试过的转换:

转化#1:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <system.web>
        <httpHandlers>
            <add path="*." verb="*" type="CustomHandler" xdt:Transform="Insert" />
        </httpHandlers>
    </system.web>
</configuration>

仅当目标web.config已包含<httpHandlers />部分时才有效。

在上面的例子中(注意,没有<httpHandlers />部分),这会导致错误:

  

源文档中的任何元素都不匹配'/configuration/system.web/httpHandlers/add'

转化#2:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <system.web>
        <httpHandlers xdt:Transform="Insert">
            <add path="*." verb="*" type="CustomHandler" />
        </httpHandlers>
    </system.web>
</configuration>

这在上面的示例中按预期工作,但是如果web.config文件包含预先存在的<httpHandlers />部分,则该部分将重复。

请记住,这是针对NuGet包的,我无法对用户配置的状态做出假设。

我是XDT Transforms的新手,所以可能错过了一些明显的东西。

1 个答案:

答案 0 :(得分:3)

看起来像this will do the trick

VS2012中的新功能,xdt:Transform="InsertIfMissing"