LeffeBrune
LeffeBrune

Reputation: 3477

Mac OS X Mono and MySql Connector Problem

I downloaded mysql-connector-net-6.4.3-noinstall.zip, extracted and renamed mysql.data.dll to MySql.Data.dll:

$ cd v2/
$ ls
mysql.data.cf.dll      mysql.data.dll         mysql.data.entity.dll  mysql.visualstudio.dll mysql.web.dll
$ mv mysql.data.dll MySql.Data.dll
$ sudo gacutil /i MySql.Data.dll 
Password:
Installed MySql.Data.dll into the gac (/Library/Frameworks/Mono.framework/Versions/2.10.4/lib/mono/gac)

I than create a symbolic link in /Library/Frameworks/Mono.framework/Versions/2.10.4/lib/mono/2.0 to MySql.Data.dll:

$ sudo ln -s ../gac/MySql.Data/6.4.3.0__c5687fc88969c44d/MySql.Data.dll MySql.Data.dll

And create a package configuration file in /Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig so that I can reference package from MonoDevelop:

Name: MySql.Data
Description: MySql.Data
Version: 6.4.3.0
Libs: -r:/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/2.0/MySql.Data.dll

Then I create a new console project, add a reference to MySql.Data and build. Compiler fails with the following exception:

Unhandled Exception: System.IO.FileLoadException: The assembly name is invalid.
  at System.Reflection.AssemblyName..ctor (System.String assemblyName) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.ImportedAssemblyDefinition.ReadAttributes () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.MetadataImporter.GetAssemblyDefinition (System.Reflection.Assembly assembly) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.ReflectionImporter.ImportAssembly (System.Reflection.Assembly assembly, Mono.CSharp.RootNamespace targetNamespace) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.DynamicLoader.LoadReferences (Mono.CSharp.ModuleContainer module) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileLoadException: The assembly name is invalid.
  at System.Reflection.AssemblyName..ctor (System.String assemblyName) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.ImportedAssemblyDefinition.ReadAttributes () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.MetadataImporter.GetAssemblyDefinition (System.Reflection.Assembly assembly) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.ReflectionImporter.ImportAssembly (System.Reflection.Assembly assembly, Mono.CSharp.RootNamespace targetNamespace) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.DynamicLoader.LoadReferences (Mono.CSharp.ModuleContainer module) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0 
  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename unknown>:0 

I also tried referencing the assembly directly with the same result.

Any advice?

I can target my project to .NET Framework v2.0 and build OK with gmcs, but not .NET 3.5 or 4.0 with dmcs.

Upvotes: 4

Views: 2306

Answers (2)

James Jeffers
James Jeffers

Reputation: 81

Update: I upgraded to mono 2.10.5. I was able to load the version 6.4.4.0 of the MySql connector for .NET/Mono. Seems to be working now.

I modified the mcs to show the AssemblyName value when loaded via "-r" during compilation. In this case I'm using connector version 6.3.7.0 and mono version 2.10.4.

mcs Main.cs -r:System.Data.dll -r:/usr/lib/mono/4.0/MySqlData.dll

Unhandled Exception: System.IO.FileLoadException: The assembly name is invalid: MySql.Data.Tests, PublicKey = 0024000004800000940000000602000000240000525341310004000001000100d973bda91f71752c78294126974a41a08643168271f65fc0fb3cd45f658da01fbca75ac74067d18e7afbf1467d7a519ce0248b13719717281bb4ddd4ecd71a580dfe0912dfc3690b1d24c7e1975bf7eed90e4ab14e10501eedf763bff8ac204f955c9c15c2cf4ebf6563d8320b6ea8d1ea3807623141f4b81ae30a6c886b3ee1
  at System.Reflection.AssemblyName..ctor (System.String assemblyName) [0x00000] in <filename unknown>:0 
  at IKVM.Reflection.AssemblyName..ctor (System.String assemblyName) [0x00000] in <filename unknown>:0 
  at Mono.CSharp.ImportedAssemblyDefinition.ReadAttributes () [0x00000] in <filename unknown>:0 

It appears that name doesn't match ("MySql.Data" vs. "MySql.Data.Tests").

Upvotes: 3

Andrew T Finnell
Andrew T Finnell

Reputation: 13628

Things to check: Ensure that the MySQL connector wasn't built with 32-bit or 64-bit set, I've had this problem with other Assemblies before. Second, check all the dependencies of the MySQL.Data.dll itself. It is unfortunate Mono does't display WHAT the assembly name was. It could of been trying to load one of it's dependencies.

Upvotes: 0

Related Questions