代码之家  ›  专栏  ›  技术社区  ›  Jaimal Chohan

FluentNhib+System.Data.SQLLite文件VS2010年

  •  1
  • Jaimal Chohan  · 技术社区  · 14 年前

    我知道这个问题以前已经在这里贴过了,我已经搜罗了尽可能多的答案,但是我仍然无法得到世界上最简单的测试。

    1) 我创建了我的测试,并确保它在VS2008中正常工作,然后在VS2010中打开了解决方案(因此,所有的3.5代码和所有的程序集引用2.0/3.0/3.5都正常工作)

      <runtime>
        <loadFromRemoteSources enabled="true"/>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
           <qualifyAssembly partialName="System.Data.SQLite" fullName="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
        </assemblyBinding>
      </runtime>
      <startup useLegacyV2RuntimeActivationPolicy="true">
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
    

    4) 我试着在x86和x64模式下运行测试

    仍然没有通过。我错过了什么?

    (哦,我使用的是SQLite20Driver,Copy Local设置为true)

    测试是一个简单的Configure()

    var cfg = Fluently.Configure(new NHibernate.Cfg.Configuration().Configure())
                           .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>()
                               .Conventions.AddFromAssemblyOf<RequiredPropertyConvention>())
                           .BuildConfiguration();
    
    var sessionFactory = cfg.BuildSessionFactory();
    

    错误

    NHibernate.hibernate异常:“The 系统数据SQLite找不到。 系统数据SQLite位于 程序集缓存。如果组件在 GAC,使用 应用程序中的元素 配置文件以指定完整的 程序集的名称。“

       at NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName)
       at NHibernate.Driver.SQLite20Driver..ctor()
       at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
       at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
       at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
       at System.Activator.CreateInstance(Type type, Boolean nonPublic)
       at System.Activator.CreateInstance(Type type)
       at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type)
       at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
       at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 settings)
       at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings)
       at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDictionary`2 settings)
       at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary`2 properties)
       at NHibernate.Cfg.Configuration.BuildSettings()
       at NHibernate.Cfg.Configuration.BuildSessionFactory()
    

    NHibernate配置

      <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
        <session-factory>
          <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
          <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
          <property name="connection.connection_string">Data Source=nhibernate.db;Version=3</property>
          <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
          <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
          <property name="query.substitutions">true=1, false=0</property>
        </session-factory>
      </hibernate-configuration>
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Jaimal Chohan    14 年前

    <configuration>
      <startup  useLegacyV2RuntimeActivationPolicy="true">
           <supportedRuntime version="v4.0"/>
      </startup>
    </configuration>
    

    使用legacyv2runtimeactivationpolicy :这告诉运行时将根据旧版本的.NET生成的程序集绑定到V4运行时,而不是使用它们生成的运行时(强制它们使用V4)

    :让.NEt知道您的应用程序支持V4运行时,并在V4运行时加载您的应用程序。

    对于单元测试,将此添加到应用程序配置包含TestFixtures的项目的一部分是不够的。你需要把这个加到应用程序配置对于nunitgui,您需要将它添加到nunit.exe.config文件. 此外,您需要确保使用的是NUnit的2.5.3+版本。

    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime version="v4.0" />
        <supportedRuntime version="v4.0"/>
      </startup>
      <runtime>
        <loadFromRemoteSources enabled="true" />
      </runtime>
    </configuration>
    

    :CAS在.Net 4中已被弃用,该行强制部分信任V2程序集以完全信任方式运行。

    必需运行时

    如果您使用不同的测试运行程序,例如ReSharpers测试运行程序,测试驱动.Net或者DXCores测试运行程序,您需要确保您已经更改了它们的应用程序配置以匹配上述内容(或等待.NET4版本的发布)