在我的PowerShell脚本中,我尝试从外部.NET DLL访问函数。 这个例子是关于Aspose.NET的,它是一个用于办公自动化的工具,可以访问各种文件格式。
大多数代码示例都是关于高级编译的.NET语言,但我想将它与PowerShell一起使用。
我的观察结果如下:
$AsposeDll = New-Object "System.IO.FileInfo" ".\Aspose.Pdf.dll"
Add-Type -Path $AsposeDll.FullName
[Reflection.Assembly]::LoadFile($AsposeDll.FullName)
这执行完美并打印出文件的版本,我认为它已被加载。
如果我将以下内容放在全球空间
[Aspose.Pdf.License]$Lic = New-Object "Aspose.Pdf.License"
它也执行得很好。 如果我将相同的命令放入顶级函数,如:
function Test
{
[Aspose.Pdf.License]$Lic = New-Object "Aspose.Pdf.License"
}
Test
这不会造成任何问题。
但是如果我把它写在一个类(它是PowerShell 5.0)中:
class PdfProvider
{
[bool]$Loaded
[Aspose.Pdf.License]$Lic
}
它不会执行,因为它告诉我无法找到类型。 即使在类“应该被读取”之前站在代码中的命令也不会被执行,所以我的猜测是它屏幕优先查看是否可能发生非法执行(不加载DLL)。
有没有办法可以在PowerShell中的类中使用外部代码,还是禁止这样做?