2012-04-25 17 views
9

Używam powershell 2.0 do edycji wielu plików csproj. Jednym z wymagań dla edycji jest dodanie nowego PropertyGroup z innego stanu (proszę sprawdzić poniższy przykład)Przestrzeń nazw Xml i C# csproj

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

Problem polega na tym, że PowerShell dodaje pustych xmlns dla wszystkich nowych znaczników PropertyGroup że dodałem.

Np

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

Czy istnieje jakiś sposób, aby dodać nowy węzeł xml bez żadnych nazw?

Próbowałem usunąć atrybut namespace za pomocą poniższego kodu przed dodaniem nowej grupy PropertyGroup, ale to nie zadziałało. (Co oznacza, że ​​atrybut nie jest faktycznie usunięte i nadal widzę pustą przestrzeń nazw po dodaniu nowego węzła.)

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

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

    $project = $content.Project; 

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

Edit: Obserwuję ten post za dodanie nowego węzła.

How to add new PropertyGroup to csproj from powershell

Przykład:

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

Należy dodać kod, którego używasz, aby dodać węzły. –

+0

@Andy dzięki .i dodano kod ady. –

+0

To jest to samo pytanie: http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/39af0a88-fedd-46d5-baea-12f8b2cfdacd (a podstawowym problemem jest: zrozumienie przestrzeni nazw XML). – Richard

Odpowiedz

10

Patrząc na tego wątku: http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace, wydaje się, że nie można łatwo zrobić, można jednak przejść z obejścia:

Zamiast z:

$content.Save($_.FullName); 

Zastosowanie:

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

działa wspaniale, ale usunął również całą "NewLine" z dokumentu. Dlaczego usuwa "\ n" z dokumentu? –

+0

@MichaelSync może to być spowodowane tym, że zapisujemy XML jako ciąg znaków. Wypróbuj aktualizacje od góry –

+0

Dzięki! To działa! –

5

Dokument csproj ma domyślny obszar nazw. Stąd przy tworzeniu elementu należy odwoływać się do tej samej przestrzeni nazw, w przeciwnym razie xml wygenerowany przy ustawieniu xmlns na pusty ciąg znaków.

Oto link gdzie znalazłem rozwiązanie

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