Невозможно использовать загруженную сборку Oracle.ManagedDataAccess в Powershell - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь подключиться к существующей базе данных Oracle, используя Powershell и Oracle.ManagedDatabaseAccess.dll.У меня есть код, работающий на C # с использованием той же библиотеки.Сборка загружена, но я не могу ее использовать.

Я использую Win10 и Powershell ISE.Я также использую VS2017 / 15.3.2 и .Net 4.7.02046.

Я пытался использовать «Add-Type -AssemblyName» и «Add-Type -Path», которые вообще не работали.Оба варианта сразу же показали ошибки.

Мне удалось позвонить

[Reflection.Assembly]::LoadFile("myrootpath\.nuget\packages\oracle.manageddataaccess.core\2.18.5\lib\netstandard2.0\Oracle.ManagedDataAccess.dll")

, но я получил:

GAC    Version        Location 
---    -------        --------                                                                                                                                                                
False   v4.0.30319     C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Oracle.ManagedDataAccess\v4.0_2.0.18.3__89b483f429c47342\Oracle.ManagedDataAccess.dll       

Я добавил сборку вручную в GAC, используя gcautil.Теперь я получаю

GAC    Version        Location   
---    -------        --------                                                                                                                                                                
True   v4.0.30319     C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Oracle.ManagedDataAccess\v4.0_2.0.18.3__89b483f429c47342\Oracle.ManagedDataAccess.dll  

Теперь, когда я звоню:

$command = New-Object Oracle.DataAccess.Client.OracleCommand($sql,$conn)

, я получаю следующую ошибку:

New-Object : The Type [Oracle.ManagedDataAccess.Client.OracleConnection] cannot be found. Make sure that you load the Assembly that contains this Type.
In Line:2 Character:8
+ $conn= New-Object Oracle.ManagedDataAccess.Client.OracleConnection($c ...
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

Я читал о решении, чтобы скомпилировать небольшойКонсольное приложение C # (поскольку это работает) и вызов его из powershell.Это может быть осуществимо, однако я действительно хочу понять, в чем здесь проблема.Любая помощь приветствуется.

Обновление / редактирование:

PS H:\> Add-Type -Path "C:\mypath\Oracle.ManagedDataAccess.dll"
Add-Type : At least one type in the assembly could not be loaded.
    + CategoryInfo          : NotSpecified: (:) [Add-Type], ReflectionTypeLoadException
    + FullyQualifiedErrorId : System.Reflection.ReflectionTypeLoadException,Microsoft.PowerShell.Commands.AddTypeCommand

PS H:\> $error[0].Exception.LoaderExceptions[0]
The type "System.IO.Stream" in the assembly "netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" could not be loaded.

Netstandard2.0.0.0 является требованием для Oracle.ManagedDataAccess.dll, который также должен был быть установлен в моем VSproject.

System.IO.Stream должен быть доступен в PS без загрузки.Может быть конфликт версий, потому что моей основной средой разработки является .Net 4.7.02046?

...