2012-04-25 15 views
9

Uso PowerShell 2.0 per modificare molti file csproj. Uno dei requisiti per la modifica è quello di aggiungere nuovi PropertyGroup con condizione diversa (Si prega di verificare l'esempio di seguito)namespace Xml e C# csproj

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

Il problema è che PowerShell aggiunti i xmlns vuote per tutti i nuovi tag PropertyGroup che ho aggiunto.

Esempio:

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

Esiste un modo per aggiungere un nuovo nodo XML senza avere alcun namespace?

Ho provato a rimuovere l'attributo namespace utilizzando il codice seguente prima di aggiungere un nuovo PropertyGroup ma non ha funzionato. (Il che significa che attributo non viene effettivamente rimosso e posso ancora vedere lo spazio dei nomi vuoto dopo l'aggiunta di nuovo nodo.)

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

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

    $project = $content.Project; 

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

Edit: Sto seguendo questo post per aggiungere nuovo nodo.

How to add new PropertyGroup to csproj from powershell

Esempio:

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

Si prega di aggiungere il codice che si utilizza per aggiungere i nodi. –

+0

@Andy grazie. Ho aggiunto il codice ady. –

+0

Questa è la stessa domanda: http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/39af0a88-fedd-46d5-baea-12f8b2cfdacd (e il problema di fondo è: capire i namespace XML). – Richard

risposta

10

Guardando questa discussione: http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace, sembra che non può essere fatto facilmente, si può comunque andare con una soluzione:

Invece di:

$content.Save($_.FullName); 

Uso:

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

funziona benissimo ma ha anche rimosso tutte le "NewLine" da doc. Perché rimuove "\ n" da doc? –

+0

@ MichaelSync potrebbe essere perché stiamo salvando XML come stringa. Prova con gli aggiornamenti da sopra –

+0

Grazie! Funziona! –

5

Il documento csproj ha un namespace predefinito. Quindi quando crei l'elemento devi fare riferimento allo stesso spazio dei nomi altrimenti troverai il xml generato con xmlns impostato sulla stringa vuota.

Ecco la link dove ho trovato la soluzione

$elem = $content.CreateElement("PropertyGroup", $content.DocumentElement.NamespaceURI); 
$content.Project.AppendChild($elem);