无法将参数'Path'绑定到目标

时间:2018-01-05 15:38:09

标签: c# powershell

我正在尝试将C#类型添加到PowerShell,如下所示:

Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll")

我收到以下错误:

Add-Type : Cannot bind parameter 'Path' to the target. Exception setting "Path":
"Cannot find path 'D:\Source\Repos\....\TestDataAccess\WinSCPnet.dll' because it
does not exist."
At D:\Source\Repos\....\TestDataAccess\WinSCPFiles.ps1:8 char:16
+ Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll")
+                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (:) [Add-Type], ParameterBindingException
    + FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.PowerShell.Commands.AddTypeCommand

1 个答案:

答案 0 :(得分:1)

您是否遵循了供应商/作者提供的所有说明/选项。

https://winscp.net/eng/docs/library_powershell

加载程序集

PowerShell脚本需要加载程序集才能使用程序集公开的类。要加载程序集,请使用Add-Type cmdlet.4)

Add-Type -Path "WinSCPnet.dll"

如果您需要从其他目录运行脚本,则需要指定程序集的完整路径。您可以使用$ PSScriptRoot自动变量从脚本文件路径派生路径:5)

Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")

如果您正在编写计划用作WinSCP扩展(自定义命令)的脚本,则可以使用随WinSCP一起安装的程序集的副本。在这种情况下,您可以使用WINSCP_PATH环境变量来解析程序集的路径。要允许脚本甚至在WinSCP之外运行,如果未定义变量,您应该回退到$ PSScriptRoot方法(如上所述):

$assemblyPath = if ($env:WINSCP_PATH) { $env:WINSCP_PATH } else { $PSScriptRoot }
Add-Type -Path (Join-Path $assemblyPath "WinSCPnet.dll")