List of nodes in a particular node in .csproj file with Powershell
Do you have to use xpath? Otherwise I would suggest something like this:
$file = [xml](gc .\test.csproj)$file.Project.PropertyGroup | ? Condition -Like '*Debug|x64*' | select Title
I solved mine this way:
[xml]$Project = Get-Content -Path $Path$ns = New-Object System.Xml.XmlNamespaceManager -ArgumentList $Project.NameTable$ns.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003")$Config = $Project.SelectSingleNode("//ns:Project/ns:PropertyGroup[contains(@Condition, 'Release')]", $ns)if (-not $Config) { throw "Could not find configuration"}
My requirement was to extract project build framework from cproj file. But my code allows to extract more data. You just need to modify it by your needs.
function GetProjectFrameworks([string]$projectName){ Write-Host "GetProjectFrameworks Read Start---------------" $xml = [Xml](Get-Content "$projectName.csproj") $frameworkValue = "" [bool] $frameworkjobDone = $false foreach($item in $xml.ChildNodes) { if($frameworkjobDone) { break } foreach($node in $item.ChildNodes) { if($frameworkjobDone) { break } foreach($obj in $node.ChildNodes) { if($obj.Name -Match 'TargetFramework') { $frameworkValue = $obj.InnerXml $frameworkjobDone = $true break } } } } $FrameworkArray = ($frameworkValue -split ';') # foreach($fram in $FrameworkArray) # { # Write-Host $fram # } Write-Host "GetProjectFrameworks Read Finish---------------" $FrameworkArray}
Hope this will help somebody.