2009-08-13 4 views
10

私はWebUpdateのさまざまなセクションを更新するためにMSBuildMSBuild Community Tasksを使用しています(XMLUpdateとXMLMassUpdateを使用しています)。私が持っている場合:MSBuildスクリプトからXML属性を更新するにはどうすればよいですか?

<configuration> 
    <nlog throwExceptions="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <targets> 
      <target name="file" xsi:type="File" fileName="${logDirectory}\SomeLog.log" layout="${message}"/> 
     </targets> 
    </nlog> 
</configuration> 

と私はそれを更新するために何かを見つけることができないと報告しtarget

<XmlUpdate XmlFileName="$(BuildDir)\Builds\%(Configuration.Identity)\_PublishedWebsites\Presentation\Web.config" 
      XPath="//configuration/nlog/targets/target[@fileName]" 
      Value="${logDirectory}\SomeLog_%(Configuration.Identity).log" /> 

fileNameを交換しようとするので、私の質問は、私は、ファイル名の属性を取得する方法です更新するには?


EDIT:NLogセクションは、独自の名前空間を定義するようこれは、名前空間の衝突の場合だろうか?


UPDATE:動作しない名前空間を宣言掲載答え。

答えて

20

最初の問題は、xpathが属性の更新に間違っていることです。現在、「target」というノードの「fileName」属性ではなく、「fileName」という属性を持つ「target」ノードを探しています。

したいXPathは次のとおりです。名前空間の問題、Preet Sangha has the correct answer for thatについては、あなたが名前空間接頭辞を使用する必要が /設定/ nlog /ターゲット/ターゲット/ @ファイル名

、これはすべてのサブに適用されなければなりませんそれらがすべてその名前空間に入っているからです。

最後の文のビーイングは:ここで私

<XmlUpdate 
    XmlFileName="web.config" 
    XPath="//configuration/x:nlog/x:targets/x:target/@fileName" 
    Value="%24{logDirectory}\SomeLog_%(Configuration.Identity).log" 
    Prefix="x" 
    Namespace="http://www.nlog-project.org/schemas/NLog.xsd" 
    /> 

<XmlUpdate 
    Prefix="n" 
    Namespace="http://www.nlog-project.org/schemas/NLog.xsd" 
    XmlFileName="output.xml" 
    XPath="//configuration/n:nlog/n:targets/n:target/@fileName" 
    Value="${logDirectory}\UpdateWorked.log" /> 
+0

これは魅力的なものでした....ありがとうございました! – Dean

4

Hereそれは、名前空間の要件

<XmlUpdate 
    Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0" 
    XmlFileName .... 

は、あなたが他の属性を更新することができますを示していますか?

+0

これは役に立ちますが、手元にある問題を解決できません。ネームスペースを宣言せずに正しく更新する他のXMLUpdateタスクがあります。 – Dean

3

keeperofthesoul(私はあなたが彼にところで恵みを与えるべきだと思う)によって与えられた答えを完了するために見てみましょう%24を使用して特殊文字$を書き出してください。

関連する問題