Hier ist eine kleine Funktion, die Sie .. ausprobieren wollen könnte (ich habe es noch nicht getestet, da ich dies mit leicht keine Kriterien zu testen ..)
Es kann durch Zuführung verwendet werden die Pfade in der Befehlszeile (ein oder mehr vollständige oder relative durch Kommata getrennt Pfade) wie diese
CheckForAbstractClassInheritance -Abstract System.Object -Assembly c:\assemblies\assemblytotest.dll, assemblytotest2.dll
oder aus der Rohrleitung
'c:\assemblies\assemblytotest.dll','assemblytotest2.dll' | CheckForAbstractClassInheritance -Abstract System.Object
oder mit Fileinfo-Objekten aus Get-Childitem (dir)
dir c:\assemblies *.dll | CheckForAbstractClassInheritance -Abstract System.Object
Tweak nach Bedarf ..
function CheckForAbstractClassInheritance()
{
param ([string]$AbstractClassName, [string[]]$AssemblyPath = $null)
BEGIN
{
if ($AssemblyPath -ne $null)
{
$AssemblyPath | Load-AssemblyForReflection
}
}
PROCESS
{
if ($_ -ne $null)
{
if ($_ -is [FileInfo])
{
$path = $_.fullname
}
else
{
$path = (resolve-path $_).path
}
$types = ([system.reflection.assembly]::ReflectionOnlyLoadFrom($path)).GetTypes()
foreach ($type in $types)
{
if ($type.IsSubClassOf($AbstractClassName))
{
#If the type is a subclass of the requested type,
#write it to the pipeline
$type
}
}
}
}
}
Die einzige hier Problem ist, dass Sie keine Klassen instanziieren oder Methoden von Baugruppen auszuführen, die nur für die Reflexion geladen wurden. – x0n