Update 18/05/2011: Scarica la versione di NHibernate-3.1.0.GA compilata con LinFu-1.0.3.28303 compatibile con Medium Trust (leggere comunque il resto l'articolo per modificare il file di configurazione)
NHibernate 3.0 è finalmente stato rilasciato in versione finale ma purtroppo presenta qualche problema con hosting Medium Trust (e quindi i siti in hosting su Aruba), vediamo come ricompilare il nostro ORM per renderlo finalmente funzionante anche in tali condizioni.
Premetto che non dobbiamo modificare il sorgente di NHibernate ma semplicemente ricompilarlo con le nuove versioni delle librerie LinFu e RemotionRelinq.
Scarichiamo:
- i sorgenti di NHibernate 3.0GA
- LinFu.DynamicProxy 1.031
- RemotionRelinq 1.13.84 (o comunque una versione successiva alla 1.13.63, le versioni con l’ultimo numero pari sono più stabili)
- NAnt 0.90 ci servirà per compilare il tutto
Come primo passo scompattiamo i sorgenti di NHibernate e al loro interno scompattiamo NAnt che sarà quindi contenuto dentro alla cartella nant-0.90.
Creiamo ora il file “Build.bat” che ci permetterà di compilare tramite NAnt col seguente contenuto:
@nant-0.90\bin\NAnt.exe -t:net-3.5 -D:project.config=release clean package
pause
Prima di lanciare la compilazione però andiamo a copiare nella cartella lib/net/3.5 dei sorgenti di NHibernate il file LinFu.DynamicProxy.dll contenuto nel secondo download e il file Remotion.Data.Linq.dll contenuto nella cartella net-3.5/bin/release del terzo download.
Lanciamo adesso il file Build.bat creato in precedenza e aspettando qualche secondo troveremo la cartella build che conterrà al suo interno il nostro NHibernate pronto per essere utilizzato in ambienti Medium Trust.
NB: La compilazione della documentazione potrebbe fallire ma ciò non influisce sulla compilazione delle dll.
Per poter utilizzare NHibernate in ambienti Medium Trust nel file di configurazione App.config dobbiamo ricordarci di specificare requirePermission="false" nelle sezioni di configurazione di NHibernate e Log4Net. Esempio:
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" requirePermission="false"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
</configSections>
...
Mentre nella hibernate-configuration dobbiamo specificare reflection-optimizer use="false" e come proxyfactory Linfu
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<reflection-optimizer use="false"/>
<session-factory>
...
<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
...
</session-factory>
</hibernate-configuration>
That’s all!
Voglio infine ringraziare Padova Boy per l'eccellente articolo su come utilizzare NHibernate 2.1.2 in ambienti Medium Trust.