List of nodes in a particular node in .csproj file with Powershell List of nodes in a particular node in .csproj file with Powershell powershell powershell

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.