wiem, że PowerShell można wywołać kodu .NET, który może wyglądać następującoJak mogę wywołać przeciążoną funkcję .NET, która używa argumentu C# out z Powershell?
PS> [Reflection.Assembly]::LoadFile(($ScriptDir + ".\SharpSvn-x64\SharpSvn.dll"))
PS> $SvnClient = New-Object SharpSvn.SvnClient
I wiem, że w przypadku C# ma out
argumenty, PowerShell ma [ref]
argumenty, które mogłyby wyglądać następująco:
PS> $info = $null
PS> $SvnClient.GetInfo($repo.local, ([ref]$info))
True
PS> $info
(...long output snipped...)
NodeKind : Directory
Revision : 16298
Uri : http://server/path/to/remoterepo
FullPath : C:\path\to\localrepo
(...long output snipped...)
I wiem, że w C# można przeciążać funkcje, jak biblioteka SharpSvn robi dla swoich SvnClient.Update() method:
Update(ICollection(String))
- rekurencyjnie aktualizuje określone ścieżki do najnowszej (głowa) rewizjiUpdate(String)
- rekurencyjnie aktualizuje sciezki do najnowszej (głowa) rewizjiUpdate(ICollection(String), SvnUpdateArgs)
- Aktualizuje określone ścieżki do określonego rewizjiUpdate(ICollection(String), SvnUpdateResult)
- rekurencyjnie aktualizuje określone ścieżki do najnowszej (głowa) rewizjiUpdate(String, SvnUpdateArgs)
- rekurencyjnie aktualizuje sciezkiUpdate(String, SvnUpdateResult)
- rekurencyjnie aktualizuje sciezki do najnowszej (głowa) REVI sionUpdate(ICollection(String), SvnUpdateArgs, SvnUpdateResult)
- Aktualizuje określone ścieżki do określonego rewizjiUpdate(String, SvnUpdateArgs, SvnUpdateResult)
- rekurencyjnie aktualizuje sciezki do najnowszej (głowa) rewizji
Ale co zrobić, jeśli chcemy umieścić to wszystko razem? Jeśli, powiedzmy, chcę wywołać 6. wersję Update()
, która pobiera String i SvnUpdateResult, gdzie SvnUpdateResult jest obiektem C# out? Moim pierwszym instynktem było wypróbowanie czegoś takiego:
PS> $repopath = "C:\path\to\localrepo"
PS> $update = $null
PS> $svnclient.update($repopath, [ref]$update)
Multiple ambiguous overloads found for "Update" and the argument count: "2".
At line:1 char:18
+ $svnclient.update <<<< ($repopath, [ref]$update)
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
OK, może muszę rzucić kłótnie?
PS> $svnclient.update([string]$repopath, [ref][SharpSvn.SvnUpdateResult]$update)
Multiple ambiguous overloads found for "Update" and the argument count: "2".
At line:1 char:18
+ $svnclient.update <<<< ([string]$repopath, [ref][SharpSvn.SvnUpdateResult]$update)
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
Ale to też nie działa. Inne rzeczy próbowałem:
- odlewania
$update
jak[SharpSvn.SvnUpdateResult][ref]
- czyli odwrócenie kolejności, że rzucam go. Powoduje to błąd, który stwierdza: "[ref] może być tylko ostatnim typem w sekwencji konwersji typu." - Przesyłanie od
$update
doSharpSvn.SvnUpdateResult
przed użyciem:$update = [SharpSvn.SvnUpdateResult]$null
. Powoduje to ten sam błąd "Wiele niejednoznacznych przeciążeń", który wystąpił powyżej - Przesyłanie od
$update
doref
przed użyciem:$update = [ref]$null
. Powoduje to błąd: "Nie można przekonwertować wartości" System.Management.Automation.PSReference "typu" System.Management.Automation.PSReference ", aby wpisać" SharpSvn.SvnUpdateResult "."
Wygląda na to, że problem polega na rzucaniu go dwukrotnie - ostateczna obsada po prostu przesłania pierwszą obsadę, nie uzupełniają się nawzajem. Czy to się dzieje? Czy istnieje sposób na rzucenie czegoś dwa razy? Czy istnieje inny sposób obejścia tego problemu?
Z góry dziękuję za pomoc.
Zauważyłem, że możesz sprawdzić przeładowane definicje za pomocą '$ svnclient.Update.OverloadedDefinitions', ale nie ma sposobu, aby wywołać je z tego, co widzę. –
Jednym ze sposobów uzyskania wglądu w wewnętrzną pracę programu PowerShell polegającego na konwersji typu konwersji/podziału członków jest uruchomienie polecenia 'Trace-Command -Name All -Expression {$ svnclient.update ($ repopath, [ref] $ update)} -PSHost' i sprawdzenie, czy to ujawnia cokolwiek pożytecznego. –
Zwraca ten sam komunikat "Wiele niejednoznacznych przeciążeń", niestety. –