Я работаю над проектом PoSh, который генерирует код CSharp, а затем Add-Type
сохраняет его в памяти.
Новые типы используют существующие типы в библиотеке DLL на диске, которая загружается через Add-Type.
Все хорошо, пока я действительно не попытаюсь вызвать методы для новых типов. Вот пример того, что я делаю:
$PWD = "."
rm -Force $PWD\TestClassOne*
$code = "
namespace TEST{
public class TestClassOne
{
public int DoNothing()
{
return 1;
}
}
}"
$code | Out-File tcone.cs
Add-Type -OutputAssembly $PWD\TestClassOne.dll -OutputType Library -Path $PWD\tcone.cs
Add-Type -Path $PWD\TestClassOne.dll
$a = New-Object TEST.TestClassOne
"Using TestClassOne"
$a.DoNothing()
"Compiling TestClassTwo"
Add-Type -Language CSharpVersion3 -TypeDefinition "
namespace TEST{
public class TestClassTwo
{
public int CallTestClassOne()
{
var a = new TEST.TestClassOne();
return a.DoNothing();
}
}
}" -ReferencedAssemblies $PWD\TestClassOne.dll
"OK"
$b = New-Object TEST.TestClassTwo
"Using TestClassTwo"
$b.CallTestClassOne()
Выполнение приведенного выше сценария приводит к следующей ошибке в последней строке:
Исключение, вызывающее «CallTestClassOne» с аргументом (ами) «0»: «Не удалось загрузить файл или сборку TestClassOne, ...» или одну из ее зависимостей. Система не может найти указанный файл ». В AddTypeTest.ps1: 39 символов: 20 + $ b.CallTestClassOne ‹------------------------------------------------ () + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException
Что я делаю неправильно?