2012-04-25 23 views
9

Estoy usando powershell 2.0 para editar una gran cantidad de archivos csproj. Uno de los requisitos para la edición es añadir nueva PropertyGroup con diferentes condiciones (Por favor, compruebe el ejemplo a continuación)Espacio de nombres Xml y C# csproj

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

El problema es que los PowerShell añadió xmlns vacíos para todas las nuevas etiquetas PropertyGroup que he añadido.

Ej:

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

¿Hay alguna forma de añadir un nuevo nodo XML sin tener ningún espacio de nombres?

Intenté eliminar el atributo de espacio de nombres utilizando el siguiente código antes de agregar un nuevo PropertyGroup pero no funcionó. (Lo que significa que el atributo no se elimina realmente y todavía se puede ver el espacio de nombres vacío después de la adición de un nuevo nodo.)

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

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

    $project = $content.Project; 

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

Editar: estoy siguiendo este post para añadir un nuevo nodo.

How to add new PropertyGroup to csproj from powershell

Ejemplo:

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

favor agregar el código que está utilizando para agregar los nodos. –

+0

@Andy gracias .i agregó el código ady. –

+0

Esta es la misma pregunta: http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/39af0a88-fedd-46d5-baea-12f8b2cfdacd (y el problema subyacente es: comprensión de los espacios de nombres XML). – Richard

Respuesta

10

En cuanto a este tema: http://bytes.com/topic/net/answers/377888-importing-nodes-without-namespace, parece que no se puede hacer fácilmente, puede, sin embargo, ir con una solución:

lugar de:

$content.Save($_.FullName); 

Usar:

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

funciona muy bien, pero también eliminó todos los "NewLine" del documento. ¿Por qué elimina "\ n" del documento? –

+0

@MichaelSync podría ser porque estamos guardando XML como cadena. Pruebe con las actualizaciones desde arriba –

+0

¡Gracias! ¡Funciona! –

5

csproj documento tiene espacio de nombre predeterminado. Por lo tanto, al crear el elemento necesita referirse al mismo espacio de nombres, de lo contrario encontrará que el xml generado con xmlns está configurado como cadena vacía.

Aquí es el link donde encontré la solución

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