Estoy trabajando con archivos csproj usando Powershell para realizar la edición a gran escala de referencias de proyectos. Hasta ahora me las he arreglado para editar los atributos incluyen en ProjectReferences utilizando las siguientes líneas:Edición XML quirúrgica con Powershell
$projectXml = [xml](Get-Content $_.Project.FullName)
Add-TfsPendingChange -edit $_.Project.FullName -ErrorAction Stop
$projectXml | Select-Xml -namespace @{msb = "http://schemas.microsoft.com/developer/msbuild/2003"} -xpath "//msb:ProjectReference[msb:Project='$projectGuid']" | Select-Object -ExpandProperty Node | foreach { $_.Include = "$newPath" }
$projectXml.Save($_.Project.FullName)
Esto funciona, y reemplaza el atributo en los ProjectReferences adecuadas se pueden citar como espero. Sin embargo, hay muchos cambios adicionales "inofensivos" realizados, como formatear todas las etiquetas en su propia línea, p. <FileUpgradeFlags></FileUpgradeFlags>
convierte
<FileUpgradeFlags>
</FileUpgradeFlags>
¿Hay alguna manera de realizar una edición como este que no tiene estos efectos secundarios? editar: para que cualquier persona que encuentre esta publicación tenga alguna otra razón, Select-MsBuildXml es solo una función de envoltura que escribí alrededor de Select-Xml que precarga el parámetro de espacio de nombres con el espacio de nombres msbuild y luego expande la propiedad del nodo .
Tengo curiosidad por saber por qué el espacio en blanco adicional representa un problema para usted. –
Principalmente porque crea un trabajo adicional en la revisión de los cambios, y también porque crea un abandono innecesario en el control de la fuente. En el caso patológico, VS elegiría volver a formatear todas estas etiquetas divididas en líneas en elementos de una línea, revolviendo todo de nuevo la próxima vez que se realice un cambio en el documento csproj, y las dos se bloqueen en un ataque de formato irritante. – bwerks
¿Podría hacerse (y mostrarse) con Select-XML en lugar de Select-MsBuildXml para que esta respuesta sea más aplicable a otras? –