【问题标题】:Powershell 2.0 Runtime exception; could not load file or assembly [duplicate]Powershell 2.0 运行时异常;无法加载文件或程序集[重复]
【发布时间】:2010-11-23 19:01:25
【问题描述】:

我试图纠正的情况是,在编译 C# 时找到了 dll,但在执行 c# 代码时找不到。这是 Powershell 2.0。我们的政策是不使用 GAC。 Powershell 函数中的 c# 代码与此类似:

function functionDef
{
  [System.Reflection.Assembly]::LoadFrom("c:\myDir\func1.dll")
  [System.Reflection.Assembly]::LoadFrom("c:\myDir\func2.dll")

  $ref = @("c:\myDir\func1.dll","c:\myDir\func2.dll")

  $cCode = @"
    using System;
    using func1;
    using func2;

    namespace serializedDef
    {
       public class defSerialization
       {

          public defSerialization () {}

   <# 
             method and properyty defs not included
          #>

          public double setSpec {
  set { computeDef(value)}
  get {return spefDef}
          }

   private double computeDef ( double value)
   {
            <# calls to methods in DLLS loaded above
             #>
   }
       }
    }
 "@
 add-type -ReferencedAssemblies $ref -TypeDefinition $cCode -passthru - Language CSharpVersion3 | out-null
}

调用此函数时,c#代码编译成功。

我将两个引用的 DLLS 的路径添加到 $env:path 值。在另一个位置安装了第 3 方 DLL 路径 DLL;该路径也被添加到 $env:path 中。出于测试目的,这两条路径上的权限都对所有人开放。

然后我将 C# 代码实例化为一个新对象:

 $myObject = new-object serializedDef.defSerialization

当我调用函数时:

 $myObject.setSpec = 35.5

我得到错误:

Exception setting "setSpec": "Could not load  file or assmbly
'func1', Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0a7c34216660f47' or one of its dependencies. The system cannot find the file specified."
At line:1 char:11
+ $myObject. <<< setSpec = 35.5
  + CategogyInfo          : InvalidOperation: (:) [], RuntimeException
  + FullyQualifedErrorId  : PropertyAssignmentException

我的理解是,该错误可能与其中一个 DLL 引用的方法等有关,但无法找到。我该如何追踪?

【问题讨论】:

  • 使用 fusglow,我将错误记录为“绑定到本机映像程序集未成功。使用 IL 图像'。模糊理解消息,但不知道如何实施必要的更改。

标签: exception powershell runtime


【解决方案1】:

.NET 程序集不是从路径加载的。应用程序基础目录是 PowerShell 安装目录,您并不想将程序集复制到那里。我建议挂钩 AppDomain.AssemblyResolve 事件。当 CLR 找不到程序集时,将调用此事件,此时您可以提供相关程序集的完整路径。查看此SO post 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多