Хирургическое редактирование XML с помощью Powershell

Я работаю с файлами csproj с помощью Powershell для выполнения крупномасштабного редактирования ссылок на проекты. Пока мне удалось отредактировать атрибуты Include в ProjectReferences, используя следующие строки:

    $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)

Это работает и заменяет атрибут Include в соответствующих ProjectReferences, как я и ожидал. Однако существует множество дополнительных «безобидных» изменений, таких как форматирование всех тегов в отдельной строке, например

становится


Есть ли способ выполнить такое редактирование, которое не имеет этих побочных эффектов?

edit: для ясности для всех, кто найдет этот пост по другим причинам, Select-MsBuildXml - это просто функция-оболочка, которую я написал для Select-Xml, которая предварительно загружает параметр пространства имен с пространством имен msbuild, а затем расширяет свойство узла.

7
задан bwerks 1 November 2011 в 01:24
поделиться