我正在使用Powershell使用csproj文件來執行項目引用的大規模編輯。到目前爲止,我已經成功地使用以下行ProjectReferences編輯的屬性包括:使用Powershell進行手術XML編輯
$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屬性。但是,還有很多額外的「無害」更改,例如在自己的產品線上格式化所有標籤,例如 <FileUpgradeFlags></FileUpgradeFlags>
成爲
<FileUpgradeFlags>
</FileUpgradeFlags>
有什麼辦法來進行編輯,如這一點,沒有這些副作用? Select-MsBuildXml只是一個包裝函數,我在Select-Xml中編寫了一個包裝函數,它用msbuild命名空間預加載命名空間參數,然後展開節點屬性。
我很想知道爲什麼多餘的空格給你帶來問題。 – 2011-02-28 21:43:11
主要是因爲它在審查更改時創建了額外的工作,並且還因爲它在源代碼控制中創建了不必要的流失。在病態情況下,VS會選擇將所有這些斷行標籤重新格式化爲單行元素,從而在下一次對csproj文檔進行更改時將所有內容重新激活,並且兩者都被鎖定在令人惱怒的格式抓鬥中。 – bwerks 2011-02-28 23:47:09
這可以通過Select-XML而不是Select-MsBuildXml來完成(並顯示)以使這個答案更適用於其他人嗎? – 2011-09-22 16:14:43