Web.config转换 - 周围的元素

时间:2010-12-16 22:52:20

标签: msbuild web-config web-config-transform

我正在使用VS2010提供的web.config转换。在这一个案例中,我想知道是否有可能在转换期间将一个元素“包围”另一个元素。这是一个例子:

默认的web.config包含:

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

我的转化文件应包含

<configuration>
  <location inheritInChildApplications="false">
    <system.web>
    ...
    </system.web>
  </location>
</configuration>

所以基本上我想用一个location元素'包装'system.web元素。我唯一的想法是做一个变换,以便我在之前和之后插入:

<location inheritInChildApplications="false" 
          xdt:Transform="InsertBefore(/configuration/system.web)">
</location xdt:Transform="InsertAfter(/configuration/system.web)">

但根据VS(我猜测因为Transform属性),结束位置元素是无效的xml。只是在system.web之前插入一个自动关闭的位置元素也无济于事,因为生成的system.web仍然没有被“包围”。

2 个答案:

答案 0 :(得分:2)

目前使用web.config转换不可能做到这一点,但是如果你编写了一个自定义转换它确实应该是可行的...有一个关于如何编写自定义转换的文档更新但是它现在还没出来......

我会尽快发布...

答案 1 :(得分:2)

如果您在webconfig中添加一个空位置标记,那么它将无效。

然后,您可以将其放在转换文件中与其他位置相同的位置:

<location xdt:Locator="XPath(some xpath expression)" 
          inheritChildApplications="false" 
          xdt:Transform="SetAttributes(inheritChildApplications)">

还有结束标记以及所有这些。