尝试为sagas设置SQLite DB时,启动NServiceBus Host项目会引发错误

时间:2011-09-01 10:42:32

标签: nhibernate nservicebus system.data.sqlite

我的Init()实施者上的IWantCustomInitialization方法是

public void Init()
{
    NServiceBus.Configure.With()
        .Log4Net()
        .DefaultBuilder()
        .MsmqTransport()
        .IsTransactional(false)
        .Sagas()
        .NHibernateSagaPersisterWithSQLiteAndAutomaticSchemaGeneration()
        .XmlSerializer(); 

}

错误是

  

数据库未通过Database方法配置。 --->   System.Resources.MissingManifestResourceException:找不到任何内容   适合特定文化或中立的资源   文化。确保“System.Data.SQLite.SR.resources”正确无误   在编译时嵌入或链接到程序集“System.Data.SQLite”,   或者所有需要的卫星组件都是可装载的并且是完全可装载的   签名。
  在System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing   (String fileName)
  在System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(Cultur)   eInfo culture,Dictionary`2 localResourceSets,Boolean tryParents,   布尔创建者eIfNotExists,StackCrawlMark& stackMark)at   System.Resources.ResourceManager.InternalGetResourceSet(的CultureInfo   请求tedCulture,Boolean createIfNotExists,Boolean tryParents,   StackCrawlMark&安培;堆栈马克)   System.Resources.ResourceManager.InternalGetResourceSet(的CultureInfo   cultur e,Boolean createIfNotExists,Boolean tryParents)at   System.Resources.ResourceManager.GetString(String name,CultureInfo   在System.Data.SQLite.SR.get_Keywords()中的文化e)   c:\ dev \ sqlite \ dotnet \ System.Data.S QLite \ SR.Designer.cs:第87行   System.Data.SQLite.SQLiteConnection.Schema_ReservedWords()in   c:\ dev \ sqlit e \ dotnet \ System.Data.SQLite \ SQLiteConnection.cs:第1239行   在System.Data.SQLite.SQLiteConnection.GetSchema(String   collectionName,Strin g [] restrictionValues)in   c:\ dev \ sqlite \ dotnet \ System.Data.SQLite \ SQLiteConnecti on.cs:第1223行   在System.Data.SQLite.SQLiteConnection.GetSchema(String   c中的collectionName):   \ dev \ sqlite \ dotnet \ System.Data.SQLite \ SQLiteConnection.cs:第1176行   在NHibernate.Dialect.Schema.AbstractDataBaseSchema.GetReservedWords()   在   NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords(方言   dialect,IConnectionHelper connectionHelper)at   NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactory   sessi onFactory)at   NHibernate.Impl.SessionFactoryImpl..ctor(配置cfg,IMapping   mappi ng,设置设置,EventListeners监听器)at   NHibernate.Cfg.Configuration.BuildSessionFactory()在   FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()

版本:

  • NServiceBus 2.5.0.1496
  • System.Data.Sqlite 1.0.74.0

1 个答案:

答案 0 :(得分:1)

此版本的SQLite for .NET以2个dll分发:

  • System.Data.SQLite.dll
  • SQLite.Interop.dll

两个dll都需要与EXE位于同一个文件夹中。 Interop dll是特定于平台的,因此您必须手动(或后期构建)复制x86或x64 版本。

要记住的另一件事是 SQLite.Interop.dll itslef取决于 MSVCR100.DLL (Visual C ++ 2010 SP1可再发行组件包的一部分)。你可以在这里得到它:

请注意,SQLite for .NET 3.5需要Visual C ++ 2008 SP1 Runtime。您可以使用Dependency Walker确认Interop程序集具有所有必需的依赖项。

可以找到此问题的解决方法here。但是,在不应用解决方法的情况下解决问题可能是一个好主意。