从GetReferencedAssemblies获取AssemblyFileVersion

时间:2012-03-08 17:32:25

标签: .net sharepoint powershell

我试图使用Powershell找到已部署的Sharepoint解决方案的AssemblyFileVersion。

到目前为止,我设法找到有关解决方案本身的信息,但现在我正试图找到关于它的参考文献的相同内容。

有没有办法获取这些数据。

到目前为止,这是我的代码

$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),但它不起作用。我认为这是一个共享点解决方案,因为它对此有影响。

2 个答案:

答案 0 :(得分:2)

我一直在寻找解决方案并找到可能对您有用的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缓存就在那里,以便最终结束:)

答案 1 :(得分:0)

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