以下是我尝试过的内容和发生的事情的成绩单。
我正在寻找如何调用特定的重载以及解释为什么以下不起作用。如果您的答案是“您应该使用此命令行”或“两次调用”,请在我不接受您的答案时理解。
PS C:\> [System.IO.Path]::Combine("C:\", "foo")
C:\foo
PS C:\> [System.IO.Path]::Combine("C:\", "foo", "bar")
Cannot find an overload for "Combine" and the argument count: "3".
At line:1 char:26
+ [System.IO.Path]::Combine <<<< ("C:\", "foo", "bar")
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
PS C:\> [System.IO.Path]::Combine(, "C:\", "foo", "bar")
Missing ')' in method call.
At line:1 char:27
+ [System.IO.Path]::Combine( <<<< , "C:\", "foo", "bar")
+ CategoryInfo : ParserError: (CloseParenToken:TokenId) [], Paren
tContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndParenthesisInMethodCall
PS C:\> [System.IO.Path]::Combine($("C:\", "foo", "bar"))
Cannot find an overload for "Combine" and the argument count: "1".
At line:1 char:26
+ [System.IO.Path]::Combine <<<< ($("C:\", "foo", "bar"))
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
这就是我在c#中所做的工作:
var foobar = Path.Combine(@"C:\", "foo", "bar");
Console.WriteLine(foobar);
Powershell将调用特定的过载? Path.Combine有以下两种:
public static string Combine (string path1, string path2, string path3);
public static string Combine (params string[] paths);
是否可以调用这两个,或只调用一个?显然,在这种特殊情况下,很难区分它们。
答案 0 :(得分:7)
接受多个参数的Path重载只能在.NET 4及更高版本中使用。您需要创建一个配置文件,告诉Powershell使用.NET 4启动,这将使您可以访问这些方法。
在$ pshome中创建一个名为“powershell.exe.config”的文件,其中包含以下内容:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
答案 1 :(得分:4)
添加,发出命令:
[System.IO.Path]::Combine.OverloadDefinitions
从你的shell ,你应该得到以下输出:
static string Combine(string path1, string path2)
如您所见,没有可用的重载。
发出命令:
$PSVersionTable
并查看CLRVersion - 您将看到在4.0之前使用的是.net版本,因此Path.Combine没有重载可用。
答案 2 :(得分:1)
在这种情况下你需要创建一个params数组并在其上调用Combine方法。可以按如下方式创建params数组:@("C:\", "foo", "bar")
我认为以下作为参数"C:\,foo,bar"
的事件应该调用第二种方法。
我不确定你对Path.Combine有什么困惑有两个重载方法,一个是组合两个字符串,另一个是接受一堆参数的参数数组,powershell中的第二个案例处理方式与c#不同。
希望这能回答你的问题..
仅供参考,我是PowerShell noob ..