Я работаю с файлами csproj, используя Powershell для масштабного редактирования ссылок на проекты. До сих пор мне удавалось редактировать атрибуты Включить в 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, как я ожидаю. Тем не менее, существует множество дополнительных «безвредных» изменений, таких как форматирование всех тегов в отдельной строке, например,
<FileUpgradeFlags></FileUpgradeFlags>
становится
<FileUpgradeFlags>
</FileUpgradeFlags>
Есть ли способ выполнить такое редактирование, которое не имеет этих побочных эффектов?
edit: для ясности всем, кто находит этот пост по другим причинам, Select-MsBuildXml - это просто функция-оболочка, которую я написал для Select-Xml, которая предварительно загружает параметр пространства имен с пространством имен msbuild и впоследствии расширяет свойство узла.