我正在使用 Powershell 处理 csproj 文件来执行项目引用的大规模编辑。到目前为止,我已经设法使用以下几行编辑 ProjectReferences 上的 Include 属性:
$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)
这有效,并按照我的预期替换了适当 ProjectReferences 上的 Include 属性。但是,还有许多额外的“无害”更改,例如在自己的行上格式化所有标签,例如
<FileUpgradeFlags></FileUpgradeFlags>
变成
<FileUpgradeFlags>
</FileUpgradeFlags>
有什么方法可以执行没有这些副作用的编辑吗?
编辑:为了让任何因其他原因发现这篇文章的人清楚起见,Select-MsBuildXml 只是我围绕 Select-Xml 编写的一个包装函数,它使用 msbuild 命名空间预加载命名空间参数,然后扩展节点属性。