Работя върху PoSh проект, който генерира CSharp код и след това го Add-Type
s в паметта.
Новите типове използват съществуващи типове в 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 char:20 + $b.CallTestClassOne ‹‹‹‹ () + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: DotNetMethodException
какво правя грешно