Как исправить ошибку PowerShell для New-Object для сборки EPPlus, загруженной с Add-Type - PullRequest
0 голосов
/ 09 апреля 2019

В PowerShell Core 6.2 я добавляю сборку EPPlus с использованием Add-Type и пытаюсь создать экземпляр объекта типа, определенного в сборке, с помощью 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)…}

Редактировать: я клонировал проект epplus из GitHub и обнаружил, что класс ExcelPackage внутри epplus dll зависит от Microsoft.Extensions.Configuration ... кажется, что Add-Type не разрешает зависимости и не загружает их. Существует опция -ReferencedAssemblies, но для этого необходимо заранее знать, какие сборки требуются. Если требуется много, команда Add-Type может стать довольно большой. Кто-нибудь знает, как определить зависимости для DLL и загрузить их. Здесь я предполагаю, что все зависимости являются частью ядра dotnet (не пользовательских сборок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...