Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Get-VSSolutionReferences.ps1
#requires -version 2.0
[CmdletBinding()]
param (
[parameter(Mandatory=$true)]
[ValidateScript({ Test-Path -Path $_ -PathType Leaf })]
[string]
$Path
)
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version Latest
$Path = ($Path | Resolve-Path).ProviderPath
$SolutionRoot = $Path | Split-Path
$SolutionProjectPattern = @"
(?x)
^ Project \( " \{ FAE04EC0-301F-11D3-BF4B-00C04F79EFBC \} " \)
\s* = \s*
" (?<name> [^"]* ) " , \s+
" (?<path> [^"]* ) " , \s+
"@
Get-Content -Path $Path |
ForEach-Object {
if ($_ -match $SolutionProjectPattern) {
$ProjectPath = $SolutionRoot | Join-Path -ChildPath $Matches['path']
$ProjectPath = ($ProjectPath | Resolve-Path).ProviderPath
$ProjectRoot = $ProjectPath | Split-Path
[xml]$Project = Get-Content -Path $ProjectPath
$nm = New-Object -TypeName System.Xml.XmlNamespaceManager -ArgumentList $Project.NameTable
$nm.AddNamespace('x', 'http://schemas.microsoft.com/developer/msbuild/2003')
$Project.SelectNodes('/x:Project/x:ItemGroup/x:Reference', $nm) |
ForEach-Object {
$RefPath = $null
if ($_.HintPath) {
$RefPath = $ProjectRoot | Join-Path -ChildPath $_.HintPath
}
New-Object -TypeName PSObject -Property @{
ProjectPath = $ProjectPath
AssemblyName = New-Object -TypeName Reflection.AssemblyName -ArgumentList $_.Include
Path = $RefPath
SpecificVersion = [Convert]::ToBoolean($_.SpecificVersion)
} |
Add-Member -Name Name -MemberType ScriptProperty -Value {
$this.AssemblyName.Name
} -PassThru |
Add-Member -Name Exists -MemberType ScriptMethod -Value {
try {
return Test-Path -Path $this.Path -PathType Leaf
} catch {
return $false
}
} -PassThru
}
}
}
@lontivero
Copy link

Some times, HintPath and SpecificVersion are not present.

@big-shadow
Copy link

Nice!
I'm going to fork this, and give it whirl. In my case, I want to remove references to missing files.

@rokaw
Copy link

rokaw commented Sep 14, 2017

changes in .proj (ex. hintPath) is not getting reflected in VS solution explorer.
How to fix this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment