2012-04-25 14 views
9

मैं कई csproj फ़ाइलों को संपादित करने के लिए powerhell 2.0 का उपयोग कर रहा हूं। संपादन के लिए आवश्यकताओं में से एक अलग शर्त के साथ नई PropertyGroup जोड़ने के लिए (नीचे दिए गए उदाहरण की जांच करें)एक्सएमएल नेमस्पेस और सी # सीस्पोज

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'"> 

समस्या यह है कि powershell सभी नए PropertyGroup टैग है कि मैं जोड़ लिया है के लिए खाली xmlns जोड़ा है।

उदाहरण के लिए:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'My-New-Env|AnyCPU'" xmlns=""> 

वहाँ किसी भी तरह से किसी भी नाम स्थान बिना नई xml नोड को जोड़ने के लिए है?

मैंने नया प्रॉपर्टी ग्रुप जोड़ने से पहले नीचे दिए गए कोड का उपयोग करके नेमस्पेस विशेषता को हटाने का प्रयास किया लेकिन यह काम नहीं किया। (जिसका अर्थ है कि विशेषता वास्तव में नहीं हटाया जाता है और मैं अभी भी नए नोड जोड़ने के बाद खाली नाम स्थान देख सकते हैं।)

$content = [xml](gc $_.FullName);  

    Write-Host "Reading "$_.FullName -foregroundcolor yellow; 

    $project = $content.Project; 

    $content.Project.RemoveAttribute("xmlns"); 

संपादित करें: मैं नए नोड जोड़ने के लिए इस पोस्ट करना चाहता हूं।

How to add new PropertyGroup to csproj from powershell

उदाहरण:

$content = [xml](gc $_.FullName); 
    $importNode = $content.ImportNode($configs.DocumentElement, $true) 
    $project = $content.Project; 
    $project 
    $project.AppendChild($importNode); 
    # $content.Save($_.FullName); 
+0

कृपया कोड आप नोड्स जोड़ने के लिए उपयोग कर रहे हैं जोड़ने पाया जाता है। –

+0

@ एंडी धन्यवाद। मैंने कोड एडी जोड़ा। –

+0

यह वही प्रश्न है: http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/39af0a88-fedd-46d5-baea-12f8b2cfdacd (और अंतर्निहित समस्या है: एक्सएमएल नेमस्पेस को समझना)। – Richard

उत्तर

10

इस सूत्र को देखते हुए: http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace, ऐसा लगता है कि यह आसानी से नहीं किया जा सकता है, तो आप, फिर भी एक समाधान के साथ जा सकते हैं:

इसके बजाय का:

$content.Save($_.FullName); 

उपयोग करें:

$content = [xml] $content.OuterXml.Replace(" xmlns=`"`"", "") 
$content.Save($_.FullName); 
+0

यह बहुत अच्छा काम करता है लेकिन यह दस्तावेज़ से सभी "न्यूलाइन" को भी हटा देता है। यह डॉक्टर से \ n "क्यों हटाता है? –

+0

@MichaelSync ऐसा इसलिए हो सकता है क्योंकि हम XML को स्ट्रिंग के रूप में सहेज रहे हैं। –

+0

से अपडेट के साथ प्रयास करें! यह काम करता हैं! –

5

csproj दस्तावेज़ में डिफ़ॉल्ट नामस्थान है। इसलिए जब तत्व बनाते हैं तो आपको उसी नामस्थान को संदर्भित करने की आवश्यकता होती है अन्यथा आपको xmlns के साथ उत्पन्न xml को खाली स्ट्रिंग पर सेट किया जाएगा।

यहाँ link जहाँ मैं समाधान

$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI); 
$content.Project.AppendChild($elem); 
संबंधित मुद्दे