Вот быстрое решение.Он захватывает каждый .csproj
файл в текущем каталоге и проверяет каждую ссылку.Для сборок, на которые ссылается GAC, выводится только имя.Для сборок вне GAC выводится полный путь к сборке.
$projectFiles = get-childitem . *.csproj -Recurse
foreach( $projectFile in $projectFiles )
{
$projectXml = [xml] (get-content $projectFile.FullName)
$projectDir = $projectFile.DirectoryName
Write-Host "# $($projectFile.FullName) #"
foreach( $itemGroup in $projectXml.Project.ItemGroup )
{
if( $itemGroup.Reference.Count -eq 0 )
{
continue
}
foreach( $reference in $itemGroup.Reference )
{
if( $reference.Include -eq $null )
{
continue
}
if( $reference.HintPath -eq $null )
{
Write-Host ("{0}" -f $reference.Include)
}
else
{
$fullpath = $reference.HintPath
if(-not [System.IO.Path]::IsPathRooted( $fullpath ) )
{
$fullPath = (join-path $projectDir $fullpath)
$fullPath = [System.IO.Path]::GetFullPath("$fullPath")
}
Write-Host $fullPath
}
}
}
Write-Host ''
}
Обратите внимание, что по умолчанию существуют некоторые записи реестра, которые MSBuild просматривает, чтобы найти расположения ссылок, на которые нет подсказкипути.Вы можете увидеть, где MSBuild выглядит и где он находит сборки, компилируя с включенным подробным ведением журнала:
msbuild My.csproj /t:build /v:d