- 
                Notifications
    
You must be signed in to change notification settings  - Fork 348
 
Description
Software versions
MySqlConnector version: 2.4.0
Server type (MariaDB) and version: 10.11.5
.NET version: 4.8 or 4.6
NuGet packages and versions:
packages resolved from nuget when using MySqlConnector version: 2.4.0
PSVersion: 5.1.22621.5909
Describe the bug
Dependency resolution is resulting in System.Runtime.CompilerServices.Unsafe version 6.0.0 but MySqlConnector.Core.ConnectionPool requires version 4.5.3
MySqlConnector 2.4.0
Dependencies
.NETFramework 4.8
System.Diagnostics.DiagnosticSource (>= 8.0.1)
System.Diagnostics.DiagnosticSource 8.0.1
.NETFramework 4.6.2
System.Runtime.CompilerServices.Unsafe (>= 6.0.0)
Exception
System.Management.Automation.MethodInvocationException: Ausnahme beim Aufrufen von "Open" mit 0 Argument(en):  "Der Typeninitialisierer für "MySqlConnector.Core.ConnectionPool" hat eine Ausnahme verursacht
." ---> System.TypeInitializationException: Der Typeninitialisierer für "MySqlConnector.Core.ConnectionPool" hat eine Ausnahme verursacht. ---> System.TypeInitializationException: Der Typeninitialisierer f
ür "PerTypeValues`1" hat eine Ausnahme verursacht. ---> System.IO.FileNotFoundException: Die Datei oder Assembly "System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b0
3f5f7f11d50a3a" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.Code sample
$ConnectionString = "server=servername;port=port;database=database_name;uid=userid;pwd=password;"
[System.Reflection.Assembly]::LoadFrom("$PSScriptRoot\MySqlConnector.dll")
try {
    # Create a MySQL Database connection
    $MySqlConnection = New-Object MySqlConnector.MySqlConnection
    $MySqlConnection.ConnectionString = $ConnectionString
    $MySqlConnection.Open()
}
catch {
    Write-Host $_.Exception
}
# Define a MySQL Command Object for a query.
$MySqlCmd = New-Object MySqlConnector.MySqlCommand
$MySqlCmd.CommandText = "SELECT * FROM table_name"
$MySqlCmd.Connection = $MySqlConnection
$MySqlAdapter = New-Object MySqlConnector.MySqlDataAdapter 
$MySqlAdapter.SelectCommand = $MySqlCmd
$DataSet = New-Object System.Data.DataSet
$DataSetCount = $MySqlAdapter.Fill($DataSet)
foreach ($row in $DataSet.Tables[0]) {
    write-host $row
}
# Close the MySQL connection.
$MySqlConnection.Close()
Expected behavior
A clear and concise description of what you expected to happen.
Additional context
There is a very dirty way to redirect assembly:
$ass = [System.Reflection.Assembly]::LoadFrom("$PSScriptRoot\System.Runtime.CompilerServices.Unsafe.dll")
$onAssemblyResolveEventHandler = [System.ResolveEventHandler] {
  param($sender, $e)
  # You can make this condition more or less version specific as suits your requirements
  if ($e.Name.StartsWith("System.Runtime.CompilerServices.Unsafe")) {
    return $ass
  }
  foreach($assembly in [System.AppDomain]::CurrentDomain.GetAssemblies()) {
    if ($assembly.FullName -eq $e.Name) {
      return $assembly
    }
  }
  return $null
}
[System.AppDomain]::CurrentDomain.add_AssemblyResolve($onAssemblyResolveEventHandler)