对于加载有Add-Type

时间:2019-04-09 05:58:21

标签: .net-core epplus powershell-core

在powershell core 6.2中,我使用Add-Type添加了EPPlus程序集,并尝试使用New-Object实例化程序集中定义的类型的对象。即使我确认程序集已加载正常,实例化也会失败。

我可以实例化加载的程序集中的某些类型,例如OfficeOpenXml.ExcelTextFormat。我最想实例化的类型(OfficeOpenXml.ExcelPackage)失败。我已经确认该程序集是dotnet核心,并且该类型具有默认构造函数。

使用以下命令加载程序集

Add-Type -AssemblyName 'C:\Users\lorimer1\.nuget\packages\epplus\4.5.3.1\lib\netstandard2.0\EPPlus.dll'

确认程序集已加载:

$asm = [appdomain]::currentdomain.GetAssemblies() | Where-Object Location -match 'EPPLus'

我可以成功实例化ExcelTextFormat:

$format = new-object -TypeName OfficeOpenXml.ExcelTextFormat

但是实例化ExcelPackage失败:

$test = New-Object -TypeName OfficeOpenXml.ExcelPackage

错误消息:

+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException

+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

New-Object : Exception calling ".ctor" with "0" argument(s): "Could not load file or assembly 'Microsoft.Extensions.Configuration, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified."

我确认了声明的构造函数:

DeclaredConstructors : {Void .ctor(), Void .ctor(System.IO.FileInfo), Void .ctor(System.IO.FileInfo, System.String), Void .ctor(System.IO.FileInfo, System.IO.FileInfo)…}

编辑:我从GitHub克隆了epplus项目,发现epplus dll中的ExcelPackage类对Microsoft.Extensions.Configuration有依赖性...看来Add-Type不能解决依赖性并加载它们。有一个-ReferencedAssemblies选项,但这需要一个人预先知道需要什么程序集。如果需要很多,Add-Type命令可能会变得很大。有谁知道如何确定dll的依赖项并加载它们。我在这里假设所有依赖项都是dotnet核心的一部分(不是自定义程序集)。

0 个答案:

没有答案