2011-08-11 91 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將解決問題並允許成功構建。

相關問題