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