Powershell dll加载

时间:2011-08-02 14:55:51

标签: powershell .net-assembly

我有一个Powershell脚本,可以调用C#库中的方法。库dll加载为:

[Reflection.Assembly]::LoadFrom("$automationHome\dll\abc.dll") | Out-Null

现在,我的C#库中使用了另一个库xyz.dll。我相信我不需要在Powershell脚本中加载它,因为abc.dll将解析它。但是,我收到一个错误说:

  

无法加载文件或程序集'xyz,Version = 1.0.0.0,   Culture = neutral,PublicKeyToken = null'或其依赖项之一。该   系统找不到指定的文件。

有人可以告诉我如何解决这个问题吗?

3 个答案:

答案 0 :(得分:7)

理想情况下,

LoadFrom()应该在与xyz.dll相同的目录中查找abc.dll

如果您从与dll相同的目录运行脚本,请添加以下内容,然后执行LoadFrom()

$currentScriptDirectory = Get-Location
[System.IO.Directory]::SetCurrentDirectory($currentScriptDirectory.Path)

答案 1 :(得分:1)

确保依赖项dll xyz位于LoadLibrary将使用的路径中。我认为在你的情况下,powershell脚本是本地的任何东西,power shell脚本的子目录中的任何东西,或者路径变量或GAC中的任何东西。

答案 2 :(得分:0)

一些想法:

从abc.dll(添加引用)对xyz.dll的引用是否将特定版本属性设置为true(默认设置)并且您使用的是更高版本的xyz.dll?

对于某些程序集,让它们工作的唯一方法是将它们加载到GAC中。您可能想尝试将xyz加载到GAC中。