2014-11-06 3 views
3

전적으로 잃어버린 일부 도움을 요청하고 싶습니다.Powershell을 사용하여 .csproj 파일의 특정 노드에있는 노드 목록

.csproj 파일의 특정 부분에있는 노드에 적절한 데이터가 들어 있는지 확인하고 싶습니다. 아래의 xml 스 니펫에서 "Debug | x64"프로필에 속한 PropertyGroup 아래의 "title"값을 되돌리고 싶습니다.

은 csproj 파일 조각은

<?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    <PropertyGroup> 
    ... 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'"> 
     <DebugSymbols>true</DebugSymbols> 
     <OutputPath>bin\x64\Debug\</OutputPath> 
     <DefineConstants>DEBUG;TRACE</DefineConstants> 
     <DebugType>full</DebugType> 
     <PlatformTarget>x64</PlatformTarget> 
     <ErrorReport>prompt</ErrorReport> 
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> 
     <!-- nuget stuff --> 
     <title>Pet Project</title> 
    </PropertyGroup> 
여기

내 파워 쉘 코드 :

function GetConfigPlatformNodeFromProjectFile($projectFile, $nodeIdentifier) { 

    [xml] $pFile = Get-Content $projectFile 
    $ns = New-Object System.Xml.XmlNamespaceManager -ArgumentList $pFile.NameTable 
    $ns.AddNamespace("ns", $pFile.Project.GetAttribute("xmlns")) 

    $nodes = $pFile.SelectNodes("//ns:Project/PropertyGroup[contains(@Condition,'Debug|x64')]", $ns) 

    foreach($node in $nodes) { 
     write-Host "node... " $node 
    } 
} 

문제는 $ 노드가 될 것입니다 항상 0 여기 기사에 따르면 그것은해야 뭔가 이상 포함 . 경로는 정상입니다. 나는 여러 번 점검했다. xmlns 속성이 올바르게 반환됩니다. 문제는 xpath 자체와 네임 스페이스라고 생각하지만 다른 XPath 도구로 여러 번 확인했습니다.

이 경우 내가 뭘 잘못하고 있는지 알 수 없습니다.

미리 도움 주셔서 감사합니다.

András

답변

6

xpath를 사용해야합니까? 그렇지 않으면 다음과 같이 제안 할 것입니다 :

$file = [xml](gc .\test.csproj) 

$file.Project.PropertyGroup | ? Condition -Like '*Debug|x64*' | select Title 
+0

아주 좋은 것처럼 보입니다! 감사! 반면에 xpath를 사용할 필요는 없으며 테스트 엔지니어이기 때문에 많은 경험이 있습니다. 나는 시험을 볼 것이고 당신의 대답은 받아 들여질 것입니다. – SayusiAndo

+1

오류가 발생합니다. 입력 이름 "조건"을 속성으로 확인할 수 없습니다. –