Skip to content

MySqlConnector with Powershell #1598

@s4uron

Description

@s4uron

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions