我正在开发一个 PoSh 项目,该项目生成 CSharp 代码,然后Add-Type
将其存储到内存中。
新类型使用磁盘 DLL 中的现有类型,该 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()
运行上述脚本在最后一行出现以下错误:
使用“0”参数调用“CallTestClassOne”的异常:“无法加载文件或程序集'TestClassOne,...'或其依赖项之一。系统找不到指定的文件。” 在 AddTypeTest.ps1:39 char:20 + $b.CallTestClassOne <<<< () + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException
我究竟做错了什么?