2009-08-13 18 views
10

मैं अपने वेब.कॉन्फिग के विभिन्न वर्गों को अद्यतन करने के लिए MSBuild और MSBuild 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 को बदलने के लिए प्रयास करते हैं, तो मेरे सवाल यह है कि मैं फ़ाइल नाम विशेषता प्राप्त कर सकते है अद्यतन करने के लिए?


संपादित करें: इस नाम स्थान संघर्ष की एक मामले के रूप में NLog अनुभाग अपने स्वयं के नाम स्थान को परिभाषित करता है हो सकता है?


अद्यतन: पोस्ट जवाब नाम अंतरिक्ष काम नहीं करता है की घोषणा की।

उत्तर

20

पहली समस्या यह है कि xpath विशेषता को अद्यतन करने के लिए गलत है, वर्तमान में यह "लक्ष्य" नामक नोड के "फ़ाइल नाम" विशेषता के बजाय "फ़ाइल नाम" नामक एक विशेषता के साथ "लक्ष्य" नोड्स की तलाश में है।

xpath आप चाहते है: /विन्यास/nlog/लक्ष्य/लक्ष्य/@ fileName

नाम स्थान मुद्दा, Preet Sangha has the correct answer for that का सवाल है, आप नामस्थान उपसर्ग उपयोग करने की आवश्यकता है, और इस हर उप करने के लिए लागू किया जाना चाहिए -साथ-साथ, क्योंकि वे सभी उस नामस्थान में हैं।

अंतिम बयान किया जा रहा है:

<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(मुझे लगता है कि तुम उसे इनाम btw देना चाहिए) दिया पूरा करने के लिए पर एक नज़र विशेष चरित्र $ लिखने के लिए %24 का उपयोग कर रहा हूं।

संबंधित मुद्दे