Получите AssemblyFileVersion от GetReferencedAssemblies - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь найти с помощью Powershell AssemblyFileVersion развернутого решения Sharepoint.

Пока мне удается найти эту информацию о самом решении, но сейчас я пытаюсь найти то же самое о его ссылках.

Есть ли способ получить эти данные.

Вот мой код

$assembly = [System.Reflection.Assembly]::LoadWithPartialName("<AssemblyName>")
$fvi = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($assembly.Location)
Write-Host "File Version Number " $fvi.ProductVersion

$references = $assembly.GetReferencedAssemblies();
foreach ($ref in $references)
{
    Write-Host $ref.Version
}

$ ref.Version возвращает AssemblyVersion, который не совпадает.

Я попробовал тот же подход ([System.Reflection.Assembly]::LoadWithPartialName), но он не работает. Я догадываюсь, что тот факт, что это решение sharepoint, влияет на это.

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Я искал решение и нашел ReflectionOnlyLoad метод, который мог бы вам помочь.

$processed = @{}
function writeAssemblyFileVersions {
  param($parentAssemblyPath)
  if ($processed[$parentAssemblyPath]) {
    return
  }
  $processed.$parentAssemblyPath = 1

  $ver = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($parentAssemblyPath).ProductVersion
  $assembly = [reflection.assembly]::LoadFile($parentAssemblyPath)

  Write-Output (New-Object PsObject -Property @{Version = $ver; Assembly = $assembly})
  foreach($a in $assembly.GetReferencedAssemblies()) {
    $aForLocation = [Reflection.Assembly]::ReflectionOnlyLoad($a.FullName)
    writeAssemblyFileVersions $aForLocation.Location
  }
}

###### sample
$loc = [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms").Location
writeAssemblyFileVersions $loc |   
  Select Version, {$_.Assembly.ManifestModule.Name}

Он рекурсивно проверяет все зависимости. Кэш $processed есть, чтобы он окончательно завершился:)

0 голосов
/ 10 марта 2012

System.Reflection.AssemblyFileVersionAttribute - это пользовательский атрибут. Используйте этот API:

ps> $assembly = [System.Reflection.Assembly]::LoadWithPartialName("<AssemblyName>")
ps> $attr = $assembly.getcustomattributes(
       [reflection.assemblyfileversionattribute])[0]
ps> $attr.version
1.0.4.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...