Как я могу свободно работать nhibernate, работая в .net 4 - PullRequest
2 голосов
/ 13 августа 2011

Я использую все dll из стандартной бесплатной загрузки nhibernate, а также стандартную sqlite dll.

Это работает, только если я переключаю целевую платформу на 3.5 - в этом случае ссылка на систему.данные переключаются на версию 2. - так что, вероятно, причина в этом dll.

Я удивлен, что беглый nhibernate, похоже, не работает сразу.

Если кто-то может сказать мне, как заставить консольное приложение .net 4 использовать dll .net 3.5 system.data (версия 2.), то это может исправить это.Или, если где-то есть секретная бесплатная загрузка nhibernate, которая работает ...

Редактировать: ОК, вот какое-то сообщение об ошибке .......


Редактировать: решено!С этим файлом app.config:

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

Unhandled Exception: FluentNHibernate.Cfg.FluentConfigurationException: An inval
id or incomplete configuration was used while creating a SessionFactory. Check P
otentialReasons collection, and InnerException for more detail.

 ---> FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplet
e configuration was used while creating a SessionFactory. Check PotentialReasons
 collection, and InnerException for more detail.

 ---> NHibernate.HibernateException: Could not create the driver from NHibernate
.Driver.SQLite20Driver, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicK
eyToken=aa95f207798dfdb4. ---> System.Reflection.TargetInvocationException: Exce
ption has been thrown by the target of an invocation. ---> System.IO.FileLoadExc
eption: Mixed mode assembly is built against version 'v2.0.50727' of the runtime
 and cannot be loaded in the 4.0 runtime without additional configuration inform
ation.
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError,
Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, Bool
ean loadTypeFromPartialName, ObjectHandleOnStack type)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError,
Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean l
oadTypeFromPartialName)
   at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean
ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   at System.Type.GetType(String typeName)
   at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow)
   at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariant
Name)
   at NHibernate.Driver.ReflectionBasedDriver..ctor(String providerInvariantName
, String driverAssemblyName, String connectionTypeName, String commandTypeName)
in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Driver\ReflectionBasedDriver.cs:lin
e 49
   at NHibernate.Driver.SQLite20Driver..ctor() in d:\CSharp\NH\NH\nhibernate\src
\NHibernate\Driver\SQLite20Driver.cs:line 28
   --- End of inner exception stack trace ---
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOn
ly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Bo
olean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipChec
kThis, Boolean fillCache)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean s
kipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance(Type type) in d
:\CSharp\NH\NH\nhibernate\src\NHibernate\Bytecode\ActivatorObjectsFactory.cs:lin
e 9
   at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 set
tings) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Connection\ConnectionProvide
r.cs:line 98
   --- End of inner exception stack trace ---
   at NHibernate.Connection.ConnectionProvider.ConfigureDriver(IDictionary`2 set
tings) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Connection\ConnectionProvide
r.cs:line 113
   at NHibernate.Connection.ConnectionProvider.Configure(IDictionary`2 settings)
 in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Connection\ConnectionProvider.cs:l
ine 64
   at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider(IDic
tionary`2 settings) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Connection\Conn
ectionProviderFactory.cs:line 50
   at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Action`1 scriptAction, Boolea
n export, Boolean justDrop) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tool\hb
m2ddl\SchemaExport.cs:line 330
   at NHibernate.Tool.hbm2ddl.SchemaExport.Execute(Boolean script, Boolean expor
t, Boolean justDrop) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tool\hbm2ddl\S
chemaExport.cs:line 290
   at NHibernate.Tool.hbm2ddl.SchemaExport.Create(Boolean script, Boolean export
) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Tool\hbm2ddl\SchemaExport.cs:line
 105
   at FluentNHibernateTest4.Program.BuildSchema(Configuration config) in C:\User
s\anna\Documents\Visual Studio 2010\Projects\TestFluentNHibernate\FluentNHiberna
teTest4\Program.cs:line 97
   at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds
\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 254
   --- End of inner exception stack trace ---
   at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds
\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 261
   at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Build
s\FluentNH-v1.x-nh3\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 227
   --- End of inner exception stack trace ---

Ответы [ 2 ]

3 голосов
/ 13 августа 2011

Вероятно, самый простой способ сослаться на Fluent nHibernate в проекте Visual Studio 2010 - это установить расширение NuGet (http://nuget.codeplex.com/) и использовать его для добавления Fluent nHibernate и его зависимостей в ваш проект.

SQLite также может быть добавлен в ваш проект с использованием этого метода (в настоящее время доступны два пакета: SQLite (только 32-битный) и SQLitex64 (32-битный + 64-битный). Пакет SQLite NuGet также добавит дополнительную конфигурацию, необходимую для разрешения исключений, которые вы Получаешь:

NHibernate.HibernateException: Could not create the driver from NHibernate
.Driver.SQLite20Driver, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicK
eyToken=aa95f207798dfdb4. ---> System.Reflection.TargetInvocationException: Exce
ption has been thrown by the target of an invocation. ---> System.IO.FileLoadExc
eption: Mixed mode assembly is built against version 'v2.0.50727' of the runtime
 and cannot be loaded in the 4.0 runtime without additional configuration inform
ation.

Это исключение также рассматривается в этом вопросе: Какая «дополнительная конфигурация» необходима для ссылки на сборку смешанного режима .NET 2.0 в проекте .NET 4.0?

0 голосов
/ 05 августа 2013

У меня была та же ошибка, и я выполнял все задачи в соответствии с советами, которые я нашел в стеке. Но проблема все еще осталась. В моем случае все было не в основном проекте, а во всех установках Nuget, которые я выполнял для второго ссылочного проекта (который действует как слой данных). Наконец, после компиляции решения в папке сборки не было сборки System.Data.SQLite (не скопировано).

Я решил ее, запустив установку Nuget System.Data.SQLite под основным проектом.

...