Сценарий, который я пытаюсь исправить, - это сценарий, в котором dll обнаруживаются при компиляции C #, но не обнаруживаются при выполнении кода c #. Это Powershell 2.0. Наша политика не использовать GAC. Код c # в функции Powershell похож на этот:
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. В другом месте установлена сторонняя 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, которую невозможно найти. Как мне отследить это?