2017-08-30 18 views
0

Quartzスケジューラ3.0.0-alpha3でSqliteをSystem.Data.Sqlite.Core(1.0.105.2)で使用しようとしましたが、私のMac OSXのVisual Studio .NETでコンパイルコア2.0コンソールアプリケーション:Quartz.net 3.xとSqlite 3.0を使用した.NET Core 2.0コンソールアプリケーション

NameValueCollection props = new NameValueCollection { 
{ "quartz.threadPool.type", "Quartz.Simpl.SimpleThreadPool, Quartz" }, 
{ "quartz.threadPool.threadCount", "10" }, 
{ "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" }, 
{ "quartz.jobStore.misfireThreshold", "60000" }, 
{ "quartz.jobStore.lockHandler.type", "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" }, 
{ "quartz.jobStore.useProperties", "true" }, 
{ "quartz.jobStore.dataSource", "default" }, 
{ "quartz.jobStore.tablePrefix", "QRTZ_" }, 
{ "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz" }, 
{ "quartz.dataSource.default.provider", "SQLite-10" }, 
{ "quartz.dataSource.default.connectionString", "Data Source=quartznet.db;Version=3;" } 
}; 

実際の行動

Quartz.SchedulerException:DataSourceを初期化できませんでした:SqliteDS ---> System.ArgumentOutOfRangeExceptionが:メタデータ情報はありませんProviderName 'プロバイダ名':プロバイダ名

(Quartz.Impl.AdoJobStore.Common.DbProvider.GetDbMetadata(C:\ projects \ quartznet-6fcn8 \ src \ Quartz \ Impl \ AdoJobStore \ Common \ DbProvider.cs:行118 (Quartz.Impl.AdoJobStore.Common.DbProvider..ctor(文字列dbProviderName、String connectionString)) .csv:C:\ projects \ quartznet-6fcn8 \ src \ Quartz \ Impl \ StdSchedulerFactory.csのQuartz.Impl.StdSchedulerFactory.d__65.MoveNext()の :行614 ---内部例外スタックトレースの終了--- Cプロジェクト:\ projects \ quartznet-6fcn8 \ src \ Quartz \ Impl \ StdSchedulerFactory.csの Quartz.Impl.StdSchedulerFactory.d__65.MoveNext():行623 - - 例外がスローされた以前の場所からのスタックトレースの終わり--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throwで () System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationで(タスクタスク) Quartz.Implで。 C:\ projects \ quartznet-6fcn8 \ src \ Quartz \ Impl \ StdSchedulerFactory.csのStdSchedulerFactory.d__69.MoveNext():行1118 ---例外がスローされた前の場所からのスタックトレースの終了--- at System BackgroundProcessingWithQuartz.Program.d__1.MoveNextでSystem.Runtime.CompilerServices.TaskAwaiter`1.GetResult() でSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク) で.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() ( )in/Users/ja [ネストされた例外を参照してください:System.ArgumentOutOfRangeException:プロバイダ 'SQLite-10'のメタデータ情報がありません。 パラメータ名:providerName 、Quartz.Impl.AdoJobStore。 Cuts:\ projects \ quartznet-6fcn8 \ src \ Quartz \ Impl \ AdoJobStore \ Common \ DbProvider.csのCommon.DbProvider.GetDbMetadata(String providerName):行118 (Quartz.Impl.AdoJobStore.Common.DbProvider..ctor) C:¥projects¥quartznet-6fcn8¥src¥Quartz¥Impl¥AdoJobStore¥Common¥DbProvider.csの行74 (C:\ projectsのQuartz.Impl.StdSchedulerFactory.d__65.MoveNext()の文字列dbProviderName、String connectionString) \ quartznet-6fcn8 \ src \ Quartz \ Impl \ StdSchedulerFactory.cs:行614

私には何が欠けていますか?すべてが私のVisual Studio for MacにNuGetを通してインストールされています。さらに、dllが実際にMacで動作しているときにCドライブへの参照があるのはなぜですか?助けてください。

答えて

3

クォーツ3.0ベータ1には、必要なパッケージの参照を追加します

箱から出してMicrosoft.Data.Sqliteをサポートしています。

PackageReference = "Microsoft.Data.Sqlite" バージョン= "2.0を含めます。0" />

PackageReference =含める "クォーツ" バージョン= "カスタムプロバイダのメタデータをあなたがしたい場合にのみ必要

の登録3.0.0-beta1の" />

class Program 
{ 
    static void Main() 
    { 
     try 
     { 
      Run().GetAwaiter().GetResult(); 
     } 
     catch (Exception e) 
     { 
      Console.Error.WriteLine(e); 
     } 
     finally 
     { 
      Console.ReadLine(); 
     } 
    } 

    private static async Task Run() 
    { 
     var properties = new NameValueCollection 
     { 
      ["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz", 
      ["quartz.jobStore.useProperties"] = "true", 
      ["quartz.jobStore.dataSource"] = "default", 
      ["quartz.jobStore.tablePrefix"] = "QRTZ_", 
      ["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz", 
      ["quartz.dataSource.default.provider"] = "SQLite-Microsoft", 
      ["quartz.dataSource.default.connectionString"] = "Data Source=test.db", 
      ["quartz.serializer.type"] = "binary" 
     }; 


     ISchedulerFactory sf = new StdSchedulerFactory(properties); 
     IScheduler sched = await sf.GetScheduler(); 

     await sched.Start(); 

     Thread.Sleep(TimeSpan.FromMinutes(10)); 
    } 
} 

をMicrosoft.Data.Sqlite以外の一部のプロバイダまたはベータ1より古いバージョンを使用しています

メタデータを登録する必要があります最初にカスタムSQLiteプロバイダを参照できるようになりました。

プロジェクトファイル:ここでは例です

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <OutputType>Exe</OutputType> 
    <TargetFramework>netcoreapp2.0</TargetFramework> 
    </PropertyGroup> 
    <ItemGroup> 
    <PackageReference Include="Microsoft.Data.Sqlite" Version="2.0.0" /> 
    <PackageReference Include="Quartz" Version="3.0.0-alpha3" /> 
    </ItemGroup> 
</Project> 

コード:

using System; 
using System.Collections.Specialized; 
using System.Data; 
using System.Threading; 
using System.Threading.Tasks; 

using Microsoft.Data.Sqlite; 

using Quartz; 
using Quartz.Impl; 
using Quartz.Impl.AdoJobStore.Common; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Run().GetAwaiter().GetResult(); 
     } 

     private static async Task Run() 
     { 
      DbProvider.RegisterDbMetadata("sqlite-custom", new DbMetadata() 
      { 
       AssemblyName = typeof(SqliteConnection).Assembly.GetName().Name, 
       ConnectionType = typeof(SqliteConnection), 
       CommandType = typeof(SqliteCommand), 
       ParameterType = typeof(SqliteParameter), 
       ParameterDbType = typeof(DbType), 
       ParameterDbTypePropertyName = "DbType", 
       ParameterNamePrefix = "@", 
       ExceptionType = typeof(SqliteException), 
       BindByName = true 
      }); 


      var properties = new NameValueCollection 
      { 
       ["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz", 
       ["quartz.jobStore.useProperties"] = "true", 
       ["quartz.jobStore.dataSource"] = "default", 
       ["quartz.jobStore.tablePrefix"] = "QRTZ_", 
       ["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz", 
       ["quartz.dataSource.default.provider"] = "sqlite-custom", 
       ["quartz.dataSource.default.connectionString"] = "Data Source=test.db", 
       ["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz", 
       ["quartz.serializer.type"] = "binary" 
      }; 


      ISchedulerFactory sf = new StdSchedulerFactory(properties); 
      IScheduler sched = await sf.GetScheduler(); 

      await sched.Start(); 

      Thread.Sleep(TimeSpan.FromMinutes(10)); 
     } 
    } 
} 

あなたが原因Quartzライブラリは、Windowsマシン上でコンパイルされたという事実のためにCドライブへの参照を見ていますPDBファイルにビルドホストマシンからのパスが含まれます。

関連する問題