Я работаю с файлами 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, а затем расширяет свойство узла.