2011-08-11 95 views
5

我试图创建一个web.config转换文件,将appSettings值的列表更改为“false”if该名称包含单词“配置”。使用xdt:locator通过条件“starts-with”或“contains”在Web.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中显示了一个错误:

Condition Requires exactly 1 arguments.

我也尝试了使用XPath作为xdt:定位器的属性,并得到了同样的错误。看起来问题来自VS 2010如何分析Condition()Xpath()中的表达式。

您如何解决此问题?

回答

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> 

这将设置在key属性为“假”包含“配置” <appSettings><add>元素的所有value属性。

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

这个问题是与Visual Studio安装在Microsoft.Web.Publishing.Tasks.Dll错误2010

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

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

相关问题