2016-08-30 27 views
-1

我不能完全弄清楚我在這裏做錯了什麼。我有一個web配置節點:使用web.config替換整個節點變換導致錯誤

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    ... 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> 
       <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 
      </dependentAssembly> 
      .... 

,我想替換這跟:使用的MSBuild TransformXml

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> 
    <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="9.0.0.0" /> 
</dependentAssembly> 

。我無法完全弄清楚xdt屬性的正確語法。下面(看起來正確的給我):

<dependentAssembly xdt:Transform="Replace" 
            xdt:Locator="Condition(param/@name='Newtonsoft.Json'"> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" /> 
    <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="9.0.0.0" /> 
</dependentAssembly> 

是導致錯誤:

XmlNodeException : Transform and Locator attributes must contain only a type name, or a type name followed by a list of attributes in parentheses.

我缺少什麼嗎?

我不能改變原來的順便說一句,這必須使用變換完成。

+0

你可以試試這個你變換 - '' – Alex

+0

這會導致錯誤'XmlNodeException:'/ configuration/runtime/_defaultNamespace:assemblyBinding/_defaultNamespace:dependentAssembly [./_ defaultNamespace:assemblyIdentity/@ name ='Newtonsoft.Js on']'有一個無效的標記。「@alex。謝謝 – Liam

+0

嗯,唯一的地方,我可以找到你最初得到的錯誤是 - https://github.com/micahlmartin/XmlTransformer/blob/master/src/XmlTransformer/XmlElementContext.cs#L292 - 這是第三方解析器...? – Alex

回答

2

屬性name='Newtonsoft.Json'位於父元素assemblyIdentity,所以我不知道爲什麼param/@name。正確的XPath表達式來測試,如果子元素命名-ignoring namespaces-「assemblyIdentity」有屬性name值等於「Newtonsoft.Json」是如下:

xdt:Locator="Condition(*[local-name()='assemblyIdentity']/@name='Newtonsoft.Json')" 
+0

就是這樣。 XPath不是我強大的TBH。謝謝 – Liam