Poniżej jest skrypt w powershellu, który dla danej wzorca nazw projektów przeszukuje wszystkie csproje i zwraca wszystkie referencje jakie są w tych plikach. Przeszukiwanie rozpoczyna się od ścieżki uruchomienia skryptu.
function Get-Reference
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelinebyPropertyName=$True)]
[string] $projectNamePattern
)
BEGIN {
Write-Host "Getting project References"
$projectFileExtension = ".csproj"
}
PROCESS{
$searchingProjectPattern = $projectNamePattern + $projectFileExtension
$projectFullNames = Get-ChildItem -Filter $searchingProjectPattern -Recurse | %{$_.FullName}
foreach ( $projectFullName in $projectFullNames)
{
if( Test-Path $projectFullName)
{
$projectName = [System.IO.Path]::GetFileNameWithoutExtension($projectFullName)
[xml]$projectXml = Get-Content $projectFullName
$itemGroups = $projectXml.Project.ItemGroup
foreach ( $itemGroup in $itemGroups)
{
if($itemGroup.Reference -ne $null)
{
foreach( $ref in $itemGroup.Reference)
{
$Object = New-Object PSObject -Property @{
RefPath = $ref.HintPath
Name = $ref.Include
ProjectPath = $projectFullName
ProjectContent = $projectXml
ProjectName = $projectName
}
$Object
}
}
if($itemGroup.ProjectReference -ne $null)
{
foreach( $ref in $itemGroup.ProjectReference)
{
$Object = New-Object PSObject -Property @{
Name = $ref.Name
RefPath = $ref.Include
ProjectPath = $projectFullname
ProjectContent = $projectXml
ProjectName = $projectName
}
$Object
}
}
}
}
}
}
END{
Write-host "`n`nHintPath => RefPath and Include => Name FOR Reference"
Write-host "Include => RefPath and Name => Name FOR ProjectReference"
}
}
A poniżej jest przykład użycia. Dajmy na to, że chcesz znaleźć referencje, które w ścieżce zawierają słowo Unity we wszystkich projektach, których nazwa zaczyna się od słowa ProjectA:
$projectNamePattern= "ProjectA*"
$projectsPattern = @($projectNamePattern)
$projectsPattern | Get-Reference | ? {$_.RefPath -ne $null} | ?{ $_.RefPath.Contains("Unity") }
Brak komentarzy:
Prześlij komentarz