私が是正しようとしているシナリオは、C#コードのコンパイル時にdllが見つかったが、c#コードが実行されたときに見つかりませんでした。これはPowershell 2.0です。私たちの方針はGACを使用しないことです。 PowerShellの機能のC#コードは、これと類似している:この関数が呼び出されると、C#コードは、タイムアウトエラーでコンパイルされPowershell 2.0ランタイム例外。ファイルまたはアセンブリをロードできませんでした
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
}
。
2つの参照DLLSのパスを$ env:pathの値に追加します。サードパーティのDLLパスDLLが別の場所にインストールされています。そのパスも$ env:パスに追加されます。両方のパスのアクセス許可は、テスト目的で全員に広く公開されています。
I新しいオブジェクトとして、インスタンス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の1つが参照しているメソッドなどに関連している可能性があります。これをどのように追跡するのですか?
fusglowを使用すると、「Bind to native image assembly not successful」というエラーが表示されます。 ILイメージを使用する '。メッセージを漠然と理解していますが、必要な変更をどのように実装するのか分かりません。 – user459866