在Web.config转换中使用条件“starts-with”或“contains”使用xdt:locator的问题

时间:2011-08-11 13:56:58

标签: web-config-transform

我正在尝试创建一个web.config转换文件,如果名称中包含单词“Config”,它会将appSettings值列表更改为“false”。

<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()中的表达式。

你如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

我提出了以下解决方案:

<?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属性中包含'Config'的<appSettings><add>元素的所有key属性设置为'false'。

<add key="SomeOtherAppSettings"
     value="OriginalValue" />
<add key="An entry containing Config in the key attribute"
     value="false" />

答案 1 :(得分:1)

此问题是Visual Studio 2010中安装的Microsoft.Web.Publishing.Tasks.Dll中的错误。

Microsoft已使用Visual Studio 2012 RTM更正了此问题 (See feedback)。

对于仍在Visual Studio 2010上的用户,将Microsoft.Web.Publishing.Tasks.Dll中的$(MSBuildToolsPath)\MSBuild\Microsoft\VisualStudio\v10.0\Web替换为$(MSBuildToolsPath)\MSBuild\Microsoft\VisualStudio\v11.0\Web中的更新文件将解决问题并允许成功构建。

答案 2 :(得分:-1)