Заполнение вашего XML в переменную ...
[xml]$foo = @'
<?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')" />
<ItemGroup>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>c:\packages\EntityFramework.6.1.2\lib\net45\EntityFramework.dll</HintPath>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>c:\packages\EntityFramework.6.1.2\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
</ItemGroup>
</Project>
'@
Я перебираю каждый элемент проекта.Для каждого проекта я тяну ссылки.Если я нахожу недопустимую ссылку (путь не существует), я получаю сообщение о неверном пути и отмечаю проект:
foreach ($project in $foo.project) {
foreach ($reference in $project.ItemGroup.Reference) {
if ([string]::IsNullOrEmpty($reference.HintPath) -eq $false) {
if ( $(Test-Path -Path $reference.HintPath) -eq $false ) {
Write-Output "Bad Path in $(${project}.Import.GetAttribute('Project'))"
}
}
}
}
Я уверен, что это не та информация, которая вам нужна.Подход вроде того, что я хочу показать.Я использую несколько петель.Один для первого лица, которое вам небезразлично: проект.Другое для второго: эталонные пути.Надеюсь, это имеет смысл.
Удачи, A-