Я пытаюсь заставить Firebird Embedded работать в простом сценарии консольного приложения .NET Core (2.1).
Файл моего проекта выглядит так:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="6.4.0" />
</ItemGroup>
</Project>
и Program.cs
вот так:
using System;
using System.IO;
using FirebirdSql.Data.FirebirdClient;
namespace Playground
{
class Program
{
static void Main(string[] args)
{
var workingDir = Directory.GetCurrentDirectory();
var dbPath = Path.Combine(workingDir, "Database.fdb");
var connString =
new FbConnectionStringBuilder
{
ClientLibrary = "libfbclient.dylib",
ServerType = FbServerType.Embedded,
UserID = "sysdba",
Database = dbPath
}
.ToString();
Console.WriteLine(connString);
FbConnection.CreateDatabase(connString, false);
var sql =
@"
CREATE TABLE my_table (
id int NOT NULL PRIMARY KEY,
name varchar(20) NOT NULL
);
";
using (var conn = new FbConnection(connString))
using (var cmd = new FbCommand(sql, conn))
{
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
}
После построения проекта (просто dotnet build
) я копирую следующие файлы из двоичного пакета для Mac (Firebird-3.0.4-33054-lipo-x86_64.pkg
) в выходной каталог (./bin/Debug/netcoreapp2.1
):
libfbclient.dylib
libib_util.dylib
libicudata.dylib
libicui18n.dylib
libicuuc.dylib
plugins (directory)
libEngine12.dylib
После запуска приложения (dotnet MyApp.dll
) я получаю исключение:
Unhandled Exception: FirebirdSql.Data.FirebirdClient.FbException: Unable to complete network request to host "localhost".
Failed to establish a connection. ---> FirebirdSql.Data.Common.IscException: Unable to complete network request to host "localhost".
Failed to establish a connection.
at FirebirdSql.Data.Client.Native.FesDatabase.ProcessStatusVector(IntPtr[] statusVector) in C:\Users\Jiri\Documents\devel\NETProvider\working\Provider\src\FirebirdSql.Data.FirebirdClient\Client\Native\FesDatabase.cs:line 332
at FirebirdSql.Data.Client.Native.FesDatabase.CreateDatabase(DatabaseParameterBuffer dpb, String dataSource, Int32 port, String database, Byte[] cryptKey) in C:\Users\Jiri\Documents\devel\NETProvider\working\Provider\src\FirebirdSql.Data.FirebirdClient\Client\Native\FesDatabase.cs:line 171
at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.CreateDatabase(DatabaseParameterBuffer dpb) in C:\Users\Jiri\Documents\devel\NETProvider\working\Provider\src\FirebirdSql.Data.FirebirdClient\FirebirdClient\FbConnectionInternal.cs:line 125
at FirebirdSql.Data.FirebirdClient.FbConnection.CreateDatabaseImpl(String connectionString, Int32 pageSize, Boolean forcedWrites, Boolean overwrite) in C:\Users\Jiri\Documents\devel\NETProvider\working\Provider\src\FirebirdSql.Data.FirebirdClient\FirebirdClient\FbConnection.cs:line 101
--- End of inner exception stack trace ---
at FirebirdSql.Data.FirebirdClient.FbConnection.CreateDatabaseImpl(String connectionString, Int32 pageSize, Boolean forcedWrites, Boolean overwrite) in C:\Users\Jiri\Documents\devel\NETProvider\working\Provider\src\FirebirdSql.Data.FirebirdClient\FirebirdClient\FbConnection.cs:line 106
at Playground.Program.Main(String[] args) in /Users/anil/Temp/Playground/Program.cs:line 24
Я успешно использовал Firebird во многих сценариях (сетевой сервер, встроенный) и с различными технологиями (Delphi, .NET, .NET Core) в течение последних 15 лет, хотя только в Windows.
Кто-нибудь может помочь с этой проблемой или указать мне подходящее место, где я мог бы RTFM и решить ее самостоятельно?