Проблема с использованием xdt:locator по условию начинается с или содержится в преобразовании Web.config

Я пытаюсь создать файл преобразования web.config, который изменит список значений appSettings на «false», если имя содержит слово «Config».

<add name="Config.Showlog" value ="true" />

Файл преобразования имеет

<appSettings>
    <add xdt:Transform="SetAttributes(value)" 
         value="false" 
         xdt:Locator="Condition(starts-with(@name,'Config')"/>
</appSettings>

Visual Studio 2010 показывает ошибку:

Условие Требуется ровно 1 аргумент.

Я также попробовал это с Xpath в качестве атрибута для локатора xdt: и получил ту же ошибку. Кажется, проблема связана с тем, как VS 2010 анализирует выражение внутри Condition() или Xpath().

Как можно обойти эту проблему?


person Patt    schedule 11.08.2011    source источник


Ответы (3)


Я придумал следующее решение:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <appSettings>
    <add xdt:Transform="SetAttributes(value)"
         value="false"
         xdt:Locator="Condition(contains(@key, 'Config'))"/>
  </appSettings>
</configuration>

Это установит для всех атрибутов value элементов <appSettings><add>, содержащих «Config» в атрибуте key, значение «false».

<add key="SomeOtherAppSettings"
     value="OriginalValue" />
<add key="An entry containing Config in the key attribute"
     value="false" />
person matthias.lukaszek    schedule 03.02.2012

Эта проблема является ошибкой в ​​Microsoft.Web.Publishing.Tasks.Dll, установленной вместе с Visual Studio 2010.

Microsoft исправила проблему с Visual Studio 2012 RTM (Посмотреть отзыв).

Для тех, кто все еще использует Visual Studio 2010, замена Microsoft.Web.Publishing.Tasks.Dll в $(MSBuildToolsPath)\MSBuild\Microsoft\VisualStudio\v10.0\Web обновленным файлом в $(MSBuildToolsPath)\MSBuild\Microsoft\VisualStudio\v11.0\Web решит проблему и позволит выполнить сборку.

person Nona Drake    schedule 26.08.2013