PowerShell générique collections
J'ai été poussée dans le .NET framework dans PowerShell, et j'ai touché quelque chose que je ne comprends pas. Cela fonctionne bien:
$foo = New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]"
$foo.Add("FOO", "BAR")
$foo
Key Value
--- -----
FOO BAR
Cela ne veut cependant pas:
$bar = New-Object "System.Collections.Generic.SortedDictionary``2[System.String,System.String]"
New-Object : Cannot find type [System.Collections.Generic.SortedDictionary`2[System.String,System.String]]: make sure t
he assembly containing this type is loaded.
At line:1 char:18
+ $bar = New-Object <<<< "System.Collections.Generic.SortedDictionary``2[System.String,System.String]"
Ils sont tous les deux dans la même assemblée, de sorte que ce qui me manque?
Comme il a été indiqué dans les réponses, c'est à peu près seulement, un problème avec PowerShell v1.
Vous devez vous connecter pour publier un commentaire.
Dictionnaire<K,V> n'est pas définie dans la même assemblée que SortedDictionary<K,V>. On est dans mscorlib et l'autre dans system.dll.
C'est là que réside le problème. Le comportement actuel en PowerShell est que lors de la résolution du générique paramètres spécifiés, si les types ne sont pas pleinement qualifiés noms de type, et il lui suppose qu'ils sont dans la même assemblée que le type générique que vous essayez de les instancier.
Dans ce cas, cela signifie qu'elle est à la recherche pour le Système.Chaîne en System.dll et pas dans mscorlib, donc il échoue.
La solution est de spécifier le nom d'assembly pleinement qualifié pour le générique des types de paramètres. C'est extrêmement laid, mais qui fonctionne:
Dans PowerShell 2.0, la nouvelle façon de créer une
Dictionary
est:Il y a quelques problèmes avec les médicaments Génériques en PowerShell. Lee Holmes, un dev sur le PowerShell équipe posté ce script pour créer des Génériques.