2014-02-07 4 views
3

курица я запускаю приложение в Visual Studio 2012, он работает как шарм, но когда я пытаюсь запустить exe-файл в папке BIN, я получаю эту ошибку:Visual Studio Borland ошибка DLL

System.IO.FileLoadException: Could not load file or assembly  'Borland.Data.DbxCommonDriver, Version=16.0.0.0, Culture=neutral, PublicKeyToken=a91a7c5705831a4f' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
File name: 'Borland.Data.DbxCommonDriver, Version=16.0.0.0, Culture=neutral, PublicKeyToken=a91a7c5705831a4f' 
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) 
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) 
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) 
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) 
at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) 
at System.Reflection.Assembly.Load(String assemblyString) 
at Borland.Data.TClassRegistryPackageItem..ctor(String PackageName) 
at Borland.Data.TClassRegistry.RegisterPackageClass(String ClassName, String PackageName) 
at Borland.Data.Units.DBXCommon.RegisterClassLoader(TDBXProperties DriverProperties, String ClassNameProp, String ClassNameDefault, String PackageNameProp, String PackageDefault, String& ResultPackageName) 
at Borland.Data.TDBXDriverRegistry.GetDriver(TDBXDriverDef DriverDef) 
at Borland.Data.TDBXConnectionFactory.GetDriver(String DriverName, TDBXProperties DriverProperties) 
at Borland.Data.TDBXConnectionBuilder.CreateConnection() 
at Borland.Data.TDBXConnectionFactory.GetConnection(TDBXContext DBXContext, TDBXProperties ConnectionProperties) 
at Borland.Data.TAdoDbxConnection.Open() 
at ProjectGroep9.LoginForm.connSuccess() in c:\Users\Tom\Project2TI\trunk\ProjectGroep9\ProjectGroep9\LoginForm.cs:line 146 
at ProjectGroep9.LoginForm.bevestigLabel_Click(Object sender, EventArgs e) in c:\Users\Tom\Project2TI\trunk\ProjectGroep9\ProjectGroep9\LoginForm.cs:line 58 
at System.Windows.Forms.Control.OnClick(EventArgs e) 
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
at System.Windows.Forms.Control.WndProc(Message& m) 
at System.Windows.Forms.Label.WndProc(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

WRN: Assembly binding logging is turned OFF. 
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1. 
Note: There is some performance penalty associated with assembly bind failure logging. 
To turn this feature off, remove the registry value  [HKLM\Software\Microsoft\Fusion!EnableLog]. 

UPDATE: Visual studio при метании ошибки говорит: не может загрузить сборку Borland.Data.DbxCommonDriver, Version = 16.0.0.0, Culture = neutral,
PublicKeyToken = a91a7c5705831a4f или одна из его зависимостей.

командует PowerShell дает мне следующий выход для the.dll в папке программных файлов interbaseAdo.NETDriver:

Borland.Data.DbxCommonDriver, Version=16.0.0.0, Culture=neutral, 
PublicKeyToken=91d62ebb5b0d1b1b 
+0

Я и мой коллега испытывают такую ​​же проблему, также см. Http: // stackoverflow.com/questions/21628601/ado-net-2-0-interbase-driver-and-asp-net-wrong-assembly-reference, не могли бы вы узнать, что такое PublicKeyToken из Borland.Data.BdxCommonDriver.DLL в вашей системе является? – RFerwerda

+0

Не могли бы вы предоставить несколько подробностей? Как, DLL-файлы, на которые ссылаются, находятся в папке bin? – RvdV79

+0

Thanx для комментариев, ребята, я изучил его сегодня со своими учителями в школе, и их реакция была чем-то вроде «какого черта, embarcadero?» ^^ ссылочные файлы находятся в папке bin :) – Docschnitzel

ответ

7

Если у вас есть Embarcadero RAD Studio установлена ​​(я использую Delphi XE2, например), то получается, что их драйверы dbExpress - новее, чем те, которые Embarcadero снабжены драйверами ADO.NET 2.0.

Так что для того, чтобы решить конкретную проблему, возможно, лучше изменить файл app.config в вашем визуальном решении студии на что-то вроде этого:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 

    <system.data> 
    <DbProviderFactories>  
     <remove invariant="Borland.Data.AdoDbxClient" /> 
     <add name="AdoDbx Data Provider" invariant="Borland.Data.AdoDbxClient" 
      description=".Net Framework Data Provider for dbExpress Drivers" 
      type="Borland.Data.TAdoDbxProviderFactory, Borland.Data.AdoDbxClient, 
      Version=16.0.0.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b"/> 
     <remove invariant="Borland.Data.DbxClientDriver" /> 
     <add name="Datasnap AdoDbx Data Provider" invariant="Borland.Data.DbxClientDriver" 
      description=".Net Framework Data Provider for Datasnap" 
      type="Borland.Data.TAdoDbxDatasnapProviderFactory, 
      Borland.Data.DbxClientDriver, Version=16.0.0.0, Culture=neutral, 
      PublicKeyToken=91d62ebb5b0d1b1b"/>  
    </DbProviderFactories> 
    </system.data> 
</configuration> 

После этого, есть одна незначительная деталь, что потребности для выполнения. Вам нужно будет найти расположение файлов конфигурации dbExpress под названием 'dbxdrivers.ini' и 'dbxconnections.ini'. Если вы разместите их в одном и том же месте ваших исполняемых файлов, это сработает. Эти драйверы указывают на правильные сборки от Embarcadero.

Существует также ошибка с настройкой соединения с базой данных, которую вы можете исправить следующим обходным путем. Вы можете найти все предоставленные dbProviderFactories (то есть установленные драйверы), чтобы убедиться, что ваши драйверы dbExpress установлены правильно. Следующий метод имеет это встроенный (только быстрый и грязный, хотя):

public InterbaseTest() 
{ 
    if (null == this.Connection) 
    { 
    try 
    { 
     /* First list all installed and registered DbProviderFactories */ 
     System.Data.DataTable dt = System.Data.Common.DbProviderFactories.GetFactoryClasses(); 
     for (int i = 0; i < dt.Rows.Count; i++) 
     Console.WriteLine("{0}: {1}", i.ToString(), dt.Rows[i][2].ToString()); 

     Console.WriteLine("------------------------------------------------------\n"); 


     this.Connection = new TAdoDbxConnection(
     string.Format("DriverName=Interbase;Database={0};", this.DatabasePath) + 
     "RoleName=RoleName;User_Name=sysdba;"+ 
     "Password=masterkey;SQLDialect=3" +        
     "MetaDataAssemblyLoader=Borland.Data.TDBXInterbaseMetaDataCommandFactory," + 
     "Borland.Data.DbxReadOnlyMetaData,Version=11.0.5000.0,Culture=neutral," + 
     "PublicKeyToken=91d62ebb5b0d1b1b;GetDriverFunc=getSQLDriverINTERBASE;" + 
     "LibraryName=dbxint30.dll;VendorLib=GDS32.DLL" 
     ); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    } 
} 

Это может показаться очевидным, что this.Connection имеет тип DBConnection, что поле в этом классе C#.

Надеюсь, это поможет!

UPDATE

Без Embarcadero RAD Studio установлена, она может быть так, что вам не хватает .ini файлов. Содержимое очень проста, поэтому вы можете создавать эти файлы самостоятельно.

'dbxconnections.ini' должен содержать следующее:

[IBConnection] 
;DelegateConnection=DBXTraceConnection 
DriverName=Interbase 
Database=database.gdb 
RoleName=RoleName 
User_Name=sysdba 
Password=masterkey 
ServerCharSet= 
SQLDialect=3 
ErrorResourceFile= 
LocaleCode=0000 
BlobSize=-1 
CommitRetain=False 
WaitOnLocks=True 
IsolationLevel=ReadCommitted 
Trim Char=False 

Содержимое 'dbxdrivers.ini' файл (самый важный) должен содержать:

[Installed Drivers] 
DBXTrace=1 
DBXPool=1 
Interbase=1 
MySQL=1 

[DBXPool] 
DelegateDriver=True 
DriverName=DBXPool 
DriverUnit=Data.DBXPool 
DriverPackageLoader=TDBXPoolDriverLoader,DBXCommonDriver160.bpl 
DriverAssemblyLoader=Borland.Data.TDBXPoolDriverLoader,Borland.Data.DbxCommonDriver,Version=16.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b 

[DBXTrace] 
DelegateDriver=True 
DriverName=DBXTrace 
DriverUnit=Data.DBXTrace 
DriverPackageLoader=TDBXTraceDriverLoader,DBXCommonDriver160.bpl 
DriverAssemblyLoader=Borland.Data.TDBXTraceDriverLoader,Borland.Data.DbxCommonDriver,Version=16.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b 

[AutoCommit] 
False=0 
True=1 

[BlockingMode] 
False=0 
True=1 

[WaitOnLocks] 
False=1 
True=0 

[CommitRetain] 
False=0 
True=1 

[OS Authentication] 
False=0 
True=1 

[Multiple Transaction] 
False=0 
True=1 

[Trim Char] 
False=0 
True=1 

[SQLDialect] 
1=0 
2=1 
3=2 


[Interbase] 
DriverUnit=Data.DBXInterBase 
DriverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver160.bpl 
DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borland.Data.DbxCommonDriver,Version=16.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b 
MetaDataPackageLoader=TDBXInterbaseMetaDataCommandFactory,DbxInterBaseDriver160.bpl 
MetaDataAssemblyLoader=Borland.Data.TDBXInterbaseMetaDataCommandFactory,Borland.Data.DbxInterBaseDriver,Version=16.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b 
GetDriverFunc=getSQLDriverINTERBASE 
LibraryName=dbxint.dll 
LibraryNameOsx=libsqlib.dylib 
VendorLib=GDS32.DLL 
VendorLibWin64=ibclient64.dll 
VendorLibOsx=libgds.dylib 
BlobSize=-1 
CommitRetain=False 
Database=database.gdb 
ErrorResourceFile= 
LocaleCode=0000 
Password=masterkey 
RoleName=RoleName 
ServerCharSet= 
SQLDialect=3 
IsolationLevel=ReadCommitted 
User_Name=sysdba 
WaitOnLocks=True 
Trim Char=False 

[Interbase TransIsolation] 
ReadCommited=1 
RepeatableRead=2 

[MYSQL] 
DriverUnit=Data.DBXMySQL 
DriverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver160.bpl 
DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borland.Data.DbxCommonDriver,Version=16.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b 
MetaDataPackageLoader=TDBXMySqlMetaDataCommandFactory,DbxMySQLDriver160.bpl 
MetaDataAssemblyLoader=Borland.Data.TDBXMySqlMetaDataCommandFactory,Borland.Data.DbxMySQLDriver,Version=16.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b 
GetDriverFunc=getSQLDriverMYSQL 
LibraryName=dbxmys.dll 
LibraryNameOsx=libsqlmys.dylib 
VendorLib=LIBMYSQL.dll 
VendorLibWin64=libmysql.dll 
VendorLibOsx=libmysqlclient.dylib 
BlobSize=-1 
Database=DBNAME 
ErrorResourceFile= 
HostName=ServerName 
LocaleCode=0000 
Password=password 
User_Name=user 
Compressed=False 
Encrypted=False 

Если вы включаете эти .ini-файлы в папку приложения, где находится ваш двоичный файл, материал должен работать.

+0

Спасибо за ответ! У меня нет студии RAD, хотя (немного дорогой: D) Я дам это решение попробовать после экзаменов, где я буду в следующем месяце! :) – Docschnitzel

+0

Без проблем, без студий RAD, может быть сложнее узнать, в чем разница, но лучше попробовать все еще включить файлы .ini. Если вы их пропустите, я могу рассказать вам содержимое этих файлов (они довольно малы). Просто отбросьте записку. Удачи вам в экзаменах! – RvdV79

+0

Я только что обновил свой ответ с содержимым файлов ini. Я протестировал это со своим собственным двоичным файлом, и он работает, когда вы включаете эти два ini-файла в свою двоичную папку. – RvdV79

Смежные вопросы