错误 0x80131047 加载 MySQL 连接器 DLL

Error 0x80131047 loading MySQL Connector DLL

PowerShell 刚刚开源 (v6.0.0-alpha.10),我是 试图让它连接到来自 OS X.

的 MySQL 实例

Oracle 似乎暗示(如果我没看错的话)他们有一个 .Net 核心连接器 here。 我运行这样安装:

Install-Package MySql.ConnectorNET.Entity -Destination /MySQL

并且输出看起来不错:

Name                       Version Source Summary                

----                       ------- ------ ------- 
MySql.ConnectorNET.Data    6.8.3.2 nugget ADO.Net driver for MySQL    
MySql.ConnectorNET.Entity  6.8.3.2 nugget MySql Connector/NET for Entity Framework 6

当我尝试像这样加载程序集时:

[System.Reflection.Assembly]::Load(/MySQL/MySql.ConnectorNET.Data.6.8.3.2/lib/net45/MySql.Data.dll)

我收到以下错误(请注意,我通过 变量 $dll):

Exception calling "Load" with "1" argument(s): "Could not load
file or assembly
'/MySQL/MySql.ConnectorNET.Entity.6.8.3.2/lib/net40/MySql.Data.dll,
Culture=neutral, PublicKeyToken=null'. The given assembly name or
codebase was invalid. (Exception from HRESULT: 0x80131047)" At
/development/scripts/test.ps1:28 char:1
+ [System.Reflection.Assembly]::Load("$dll")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : FileLoadException

关于解决方法/修复的任何想法?我意识到 PowerShell 仍在 阿尔法

编辑

我能够使用这两个命令安装 MySQL 提供程序:

Register-PackageSource -Name nuget.org -ProviderName NuGet -Location https://www.nuget.org/api/v2/
Install-Package MySql.Data.EntityFrameworkCore -Destination /Volumes/Main/libraries/MySQL/ -AllowPrereleaseVersions

我尝试注册了所有我能想到的程序集:

Microsoft.EntityFrameworkCore.1.0.1/lib/netstandard1.3/Microsoft.EntityFrameworkCore.dll
Microsoft.Extensions.Configuration.1.0.0/lib/netstandard1.1/Microsoft.Extensions.Configuration.dll
Microsoft.Extensions.Configuration.Json.1.0.0/lib/netstandard1.3/Microsoft.Extensions.Configuration.Json.dll
MySql.Data.EntityFrameworkCore.7.0.5-IR21/lib/netstandard1.6/MySql.Data.EntityFrameworkCore.dll
MySql.Data.7.0.5-IR21/lib/netstandard1.6/MySql.Data.dll 

但是,当试图创建一个新的 MySql 对象时,它仍然会爆炸 这个:

New-Object : Cannot find type [MySql.Data.MySqlClient]: verify that the assembly containing this type is loaded.

这不是 .NET Core 库 - 此处的 "Core" 一词表示 EF6 和 Web 包之间共享的功能,并且早于 .NET Core 的引入。

Entity Framework 在撰写本文时,核心有 MySql 个库正在开发中。

解决方案

所以,事实证明我走在了(大部分)正确的轨道上。 所有 个 DLL 需要加载。通过将它们复制到自己的目录中,然后通过遍历每个目录来加载它们,让生活更轻松:

将 DLL 复制到新位置

Get-ChildItem "/Volumes/Main/libraries/mysql/*/lib/netstandard1.*/*.dll" | Copy-Item -Destination "/Volumes/Main/libraries/NEW_mysql" -Force

加载所有需要的 DLL

Get-ChildItem "/Volumes/Main/libraries/NEW_mysql" | ForEach-Object {
$path = "/Volumes/Main/libraries/NEW_mysql/" + $_.Name
Add-Type -Path $path -PassThru | Out-Null
}