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