When I run the below script from within my VS2013 C# PreBuildEvent block, it locks the executable/assembly whose attributes I am querying: "open file handle" is the error I get. When I run it interactively, it appears to work fine. How can I add a 'using' statement or otherwise close the file handle? thank you!
function Get-AssemblyProperty {
param
(
$anExe = "%temp%\my.exe",
[ValidateSet('System.Runtime.Versioning.TargetFrameworkAttribute',
'System.Reflection.AssemblyFileVersionAttribute',
'System.Reflection.AssemblyTitleAttribute',
'System.Reflection.AssemblyDescriptionAttribute',
'System.Reflection.AssemblyConfigurationAttribute',
'System.Reflection.AssemblyCompanyAttribute',
'System.Reflection.AssemblyProductAttribute',
'System.Reflection.AssemblyCopyrightAttribute',
'System.Reflection.AssemblyTrademarkAttribute',
'System.Runtime.InteropServices.ComVisibleAttribute',
'System.Runtime.InteropServices.GuidAttribute',
'System.Diagnostics.DebuggableAttribute',
'System.Runtime.CompilerServices.CompilationRelaxationsAttribute',
'System.Runtime.CompilerServices.RuntimeCompatibilityAttribute' )]
$anAttribute = "System.Reflection.AssemblyDescriptionAttribute"
)
$thisFcn = "Get-AssemblyProperties"
$assembly = [Reflection.Assembly]::LoadFile($anexe)
$ary = $assembly.GetCustomAttributesData()
Write-Debug "$thisFcn : Array = $ary ."
$row = $ary | Where-Object { $_.AttributeType -like "$anAttribute" }
Write-Debug "$thisFcn : Matching Row = $row ."
# Matching Row = [System.Reflection.AssemblyDescriptionAttribute("Our application for Great Company")]
$ans = ( $row -split '"' )[1] # second
Write-Debug "$thisFcn : Answer = $ans ."
return $ans
}
Aucun commentaire:
Enregistrer un commentaire