Преобразование Web.config - окружающие элементы - PullRequest
8 голосов
/ 17 декабря 2010

Я использую преобразования web.config, доступные через VS2010. В этом одном случае мне интересно, можно ли «окружить» элемент другим во время преобразования. Вот пример:

по умолчанию web.config содержит:

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

Мой преобразованный файл должен содержать

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

Так что, по сути, я хочу «обернуть» элемент system.web элементом location. Моя единственная мысль состояла в том, чтобы сделать преобразование так, чтобы я вставлял до и после как:

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

Но закрывающий элемент местоположения не является действительным xml в соответствии с VS (я предполагаю, что из-за атрибута Transform). Простая вставка самозакрывающегося элемента местоположения перед system.web также не помогает, потому что результирующий system.web все еще не «окружен».

Ответы [ 2 ]

2 голосов
/ 29 января 2013

Если вы добавите пустой тег местоположения в веб-конфигурацию там, где вы хотите, чтобы он был, это не будет иметь никакого эффекта.

Затем вы можете поместить это в свой файл преобразования в то же место, что и другое:

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

с закрывающим тегом тоже и все такое.

2 голосов
/ 17 декабря 2010

В настоящее время это невозможно сделать с помощью преобразования web.config, но это действительно должно быть выполнимо, если вы написали пользовательское преобразование ... Существует обновление документации, касающееся написания пользовательских преобразований, но оноеще не вышел ...

Я опубликую его, как только он станет доступен ...

...