【发布时间】: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