Проблема с Mac OS X Mono и MySql Connector - PullRequest
4 голосов
/ 24 августа 2011

Я скачал mysql-connector-net-6.4.3-noinstall.zip, распаковал и переименовал mysql.data.dll в 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)

Затем я создаю символическую ссылку в /Library/Frameworks/Mono.framework/Versions/2.10.4/lib/mono/2.0 на MySql.Data.dll:

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

И создайте файл конфигурации пакета в /Library/Frameworks/Mono.framework/Versions/Current/lib/pkgconfig, чтобы я мог ссылаться на пакет из 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

Затем я создаю новый консольный проект, добавляю ссылку на MySql.Data и собираю. Сбой компилятора со следующим исключением:

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 

Я также пытался ссылаться на сборку напрямую с тем же результатом.

Любой совет?

Я могу нацелить свой проект на .NET Framework v2.0 и собрать нормально с помощью gmcs, но не .NET 3.5 или 4.0 с dmcs.

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

Обновление : я обновился до моно 2.10.5.Мне удалось загрузить версию 6.4.4.0 коннектора MySql для .NET / Mono.Кажется, сейчас работает.

Я изменил mcs, чтобы показать значение AssemblyName при загрузке через "-r" во время компиляции.В этом случае я использую версию коннектора 6.3.7.0 и моно версию 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 

Похоже, что имя не совпадает («MySql.Data» против «MySql.Data.Tests»).«).

0 голосов
/ 25 августа 2011

Что нужно проверить: Убедитесь, что коннектор MySQL не был собран с 32-битным или 64-битным набором, у меня раньше была эта проблема с другими сборками.Во-вторых, проверьте все зависимости самого MySQL.Data.dll.К сожалению, Mono не отображает, ЧТО было название сборки.Возможно, он пытался загрузить одну из своих зависимостей.

...