Powershell は、次のような .NET コードを呼び出すことができることを知っています。
PS> [Reflection.Assembly]::LoadFile(($ScriptDir + ".\SharpSvn-x64\SharpSvn.dll"))
PS> $SvnClient = New-Object SharpSvn.SvnClient
out
そして、C# に引数がある場合、Powershell には[ref]
次のような引数があることを知っています。
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...)
また、C# では、SharpSvn ライブラリがSvnClient.Update() メソッドに対して行うように、関数をオーバーロードできることを知っています。
Update(ICollection(String))
- 指定されたパスを最新 (HEAD) リビジョンに再帰的に更新しますUpdate(String)
- 指定されたパスを最新 (HEAD) リビジョンに再帰的に更新しますUpdate(ICollection(String), SvnUpdateArgs)
- 指定されたパスを指定されたリビジョンに更新しますUpdate(ICollection(String), SvnUpdateResult)
- 指定されたパスを最新 (HEAD) リビジョンに再帰的に更新しますUpdate(String, SvnUpdateArgs)
- 指定されたパスを再帰的に更新しますUpdate(String, SvnUpdateResult)
- 指定されたパスを最新 (HEAD) リビジョンに再帰的に更新しますUpdate(ICollection(String), SvnUpdateArgs, SvnUpdateResult)
- 指定されたパスを指定されたリビジョンに更新しますUpdate(String, SvnUpdateArgs, SvnUpdateResult)
- 指定されたパスを最新 (HEAD) リビジョンに再帰的に更新します
しかし、これらすべてをまとめたい場合はどうすればよいでしょうか。Update()
たとえば、文字列と SvnUpdateResult を受け取るの 6 番目のバージョンを呼び出したい場合、 SvnUpdateResult は C# の out オブジェクトですか? 私の最初の本能は、次のようなことを試すことでした:
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、多分私は引数をキャストする必要がありますか?
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
しかし、それもうまくいかないようです。私が試した他のこと:
$update
としてキャスト[SharpSvn.SvnUpdateResult][ref]
- つまり、キャストした順序を逆にします。その結果、「[ref] は型変換シーケンスの最後の型にしかできません」というエラーが発生します。- 使用前に
$update
キャスト: . これにより、上記で遭遇したのと同じ「複数のあいまいなオーバーロード」エラーが発生しますSharpSvn.SvnUpdateResult
$update = [SharpSvn.SvnUpdateResult]$null
- 使用前に
$update
キャスト: . これにより、エラーが発生します:「型 "System.Management.Automation.PSReference" の "System.Management.Automation.PSReference" 値を型 "SharpSvn.SvnUpdateResult" に変換できません。」ref
$update = [ref]$null
それを2回キャストすることが問題のようです-最後のキャストは最初のキャストをオーバーライドするだけで、互いに補完しません。これは何が起こっているのですか?何かを2回キャストする方法はありますか? この問題を回避する別の方法はありますか?
助けてくれてありがとう。