我有一个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'或其依赖项之一。该 系统找不到指定的文件。
有人可以告诉我如何解决这个问题吗?
答案 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中。