मुझे पता है कि Powershell, .NET कोड कॉल कर सकते हैं इसमैं ओवरलोडेड .NET फ़ंक्शन को कैसे कॉल कर सकता हूं जो पावरहेल से सी # आउट तर्क का उपयोग करता है?
PS> [Reflection.Assembly]::LoadFile(($ScriptDir + ".\SharpSvn-x64\SharpSvn.dll"))
PS> $SvnClient = New-Object SharpSvn.SvnClient
की तरह लग रहे हो सकता है और मुझे पता है कि जहां सी # out
तर्क हैं, तो 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...)
और मुझे पता है कि सी # में आप कार्यों को ओवरलोड कर सकते हैं, SharpSvn पुस्तकालय की तरह अपने SvnClient.Update() method के लिए करता है:
Update(ICollection(String))
- रिकर्सिवली नवीनतम (सिर) संशोधनUpdate(String)
करने के लिए निर्दिष्ट पथ अपडेट - रिकर्सिवली नवीनतम (सिर) संशोधनUpdate(ICollection(String), SvnUpdateArgs)
को निर्दिष्ट पथ अपडेट - निर्दिष्ट संशोधनUpdate(ICollection(String), SvnUpdateResult)
करने के लिए निर्दिष्ट पथ अपडेट - रिकर्सिवली अद्यतन करता है नवीनतम (सिर) संशोधनUpdate(String, SvnUpdateArgs)
करने के लिए निर्दिष्ट पथ - रिकर्सिवली नवीनतम (सिर) के लिए निर्दिष्ट पथ अद्यतन करता Revi - रिकर्सिवली निर्दिष्ट पथUpdate(String, SvnUpdateResult)
अद्यतन करता है सायनUpdate(ICollection(String), SvnUpdateArgs, SvnUpdateResult)
- अपडेट निर्दिष्ट संशोधनUpdate(String, SvnUpdateArgs, SvnUpdateResult)
करने के लिए निर्दिष्ट पथ - रिकर्सिवली नवीनतम (सिर) संशोधन
लेकिन करने के लिए निर्दिष्ट पथ अद्यतन करता है, अगर हम यह सब एक साथ रखना चाहते हैं? यदि, कहें, मैं Update()
का 6 वां संस्करण कॉल करना चाहता हूं, जो स्ट्रिंग और एक SvnUpdateResult लेता है, जहां SvnUpdateResult एक C# आउट ऑब्जेक्ट है? मेरा पहला वृत्ति इस तरह कुछ करने की कोशिश कर रहा था:
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
ठीक है, शायद मुझे तर्क डालना होगा?
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
ref
का उपयोग करने से पहले$update = [ref]$null
कास्टिंग कर रहा था। इसका परिणाम एक त्रुटि में होता है: '"SharpSvn.SvnUpdateResult" टाइप करने के लिए "System.Management.Automation.PSReference" प्रकार का "System.Management.Automation.PSReference" मान को परिवर्तित नहीं किया जा सकता है।
ऐसा लगता है कि इसे दो बार कास्टिंग करना समस्या है - अंतिम कलाकार सिर्फ पहली कलाकार को ओवरराइड करता है, वे एक-दूसरे के पूरक नहीं होते हैं। क्या यह हो रहा है? क्या दो बार कुछ डालने का कोई तरीका है? क्या इस समस्या के आसपास एक और तरीका है?
किसी भी मदद के लिए अग्रिम धन्यवाद।
मुझे पता चला है कि आप '$ svnclient.Update.OverloadedDefinitions' के साथ ओवरलोडेड परिभाषाओं की जांच कर सकते हैं, लेकिन वहां से उनसे कॉल करने का कोई तरीका नहीं है जो मैं देख सकता हूं। –
पावरशेल के प्रकार रूपांतरण/सदस्य रिज़ॉल्यूशन आंतरिक कार्यों में कुछ अंतर्दृष्टि प्राप्त करने का एक तरीका है 'ट्रेस-कमांड -नाम ऑल-एक्सपेरेशन {$ svnclient.update ($ repopath, [ref] $ अपडेट)} -PSHost' और देखें कि क्या जो कुछ भी उपयोगी बताता है। –
दुर्भाग्यवश, यह "एकाधिक अस्पष्ट अधिभार" संदेश देता है। –