<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>.NET Development</title>
        <link>http://blogs.ugidotnet.org/Alby/category/412.aspx</link>
        <description>.NET Development</description>
        <language>it-IT</language>
        <copyright>Alberto Dallagiacoma</copyright>
        <generator>Subtext Version 2.1.0.3</generator>
        <item>
            <title>NBuilder</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/11/02/nbuilder.aspx</link>
            <description>&lt;p&gt;Me lo segno qui, perché l’altro qualche giorno fa ne avevo bisogno, ma non mi ricordavo né il nome, né il sito… &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-steamingmad" alt="Steaming mad" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/Windows-Live-Writer/NBuilder_A1DD/wlEmoticon-steamingmad_2.png" /&gt; (grazie &lt;a href="http://blog.fewbit.com/" target="_blank"&gt;Luca&lt;/a&gt;, per il reminder &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/Windows-Live-Writer/NBuilder_A1DD/wlEmoticon-openmouthedsmile_2.png" /&gt;).&lt;/p&gt;  &lt;p&gt;Tutte le volte che creiamo i nostri unit test, abbiamo anche bisogno di creare le istanze delle classi che saranno poi oggetto dei test.    &lt;br /&gt;&lt;a href="http://www.nbuilder.org/" target="_blank"&gt;NBuilder&lt;/a&gt; è una libreria che facilita la creazione di test objects, evitandoci di scrivere tutto quel noioso codice in fase di &lt;a href="http://www.nunit.org/index.php?p=setup&amp;amp;r=2.5.8" target="_blank"&gt;SetUp&lt;/a&gt;/&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.testinitializeattribute.aspx" target="_blank"&gt;TestInitialize&lt;/a&gt; di ogni test fixture.&lt;/p&gt;  &lt;p&gt;Io l’ho trovata davvero utile! Il download, &lt;a href="http://www.nbuilder.org/Download" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:74bf6f84-2ac0-4a18-a6ab-a705ca51aade" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Testing" rel="tag"&gt;Testing&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/99427.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/11/02/nbuilder.aspx</guid>
            <pubDate>Tue, 02 Nov 2010 10:41:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/11/02/nbuilder.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/99427.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/99427.aspx</trackback:ping>
        </item>
        <item>
            <title>Nuova versione di Castle Windsor (e NHibernate?)</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/08/24/nuova-versione-di-castle-windsor-e-nhibernate.aspx</link>
            <description>&lt;p&gt;Giusto ieri è stata rilasciata la &lt;a href="http://kozmic.pl/archive/2010/08/22/castle-windsor-incl.-core-with-dynamicproxy-and-dictionary-adapter-v2.5.aspx" target="_blank"&gt;nuova versione 2.5&lt;/a&gt; di &lt;a href="http://www.castleproject.org/container/index.html" target="_blank"&gt;Castle Windsor&lt;/a&gt;; tra le tante novità, il supporto a .NET 4.0 e &lt;a href="http://www.silverlight.net/" target="_blank"&gt;Silverlight&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Bene; supponiamo di voler aggiornare un progetto esistente basato su &lt;a href="http://www.nhforge.org" target="_blank"&gt;NHibernate&lt;/a&gt;, in modo che usi anche l’ultima versione di Castle Windsor.     &lt;br /&gt;Prima della versione 2.1.x di NHibernate, la cosa non era semplicissima, dato che era presente una reference diretta agli assembly Castle.Core e Castle.DynamicProxy, quindi l’unica strada percorribile era::&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Scaricare &lt;a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/" target="_blank"&gt;il codice sorgente di NHibernate&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Scaricare la versione di Castle Windsor desiderata. &lt;/li&gt;    &lt;li&gt;Copiare gli assembly Castle.Core e Castle.DynamicProxy nelle cartelle di build di NH sostituendo gli assembly esistenti. &lt;/li&gt;    &lt;li&gt;Ricompilare NHibernate. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Dalla versione 2.1.x di NHibernate, le cose si sono semplificate, visto che &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx" target="_blank"&gt;è stata rimossa la dipendenza diretta da Castle&lt;/a&gt;. In questo caso quindi, basta ricompilare la ProxyFactory per Castle, in questo modo:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Scaricare &lt;a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/" target="_blank"&gt;il codice sorgente di NHibernate&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Cambiare le references a Castle nel progetto NHibernate.ByteCode.Castle e ricompilarlo. &lt;/li&gt;    &lt;li&gt;Fare il deploy di NHibernate.ByteCode.Castle con le references aggiornate. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Visto che NHibernate non ha la reference diretta all’assembly della ProxyFactory, ma viene caricata quella indicata nella proprietà &lt;em&gt;proxyfactory.factory_class&lt;/em&gt;, è abbastanza facile gestire la cosa semplicemente copiando nella cartella di output del progetto i files della versione di ProxyFactory desiderata.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3d27b6ce-a25d-4a46-9dee-345a7798bc26" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Castle" rel="tag"&gt;Castle&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/99106.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/08/24/nuova-versione-di-castle-windsor-e-nhibernate.aspx</guid>
            <pubDate>Tue, 24 Aug 2010 12:06:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/08/24/nuova-versione-di-castle-windsor-e-nhibernate.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/99106.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/99106.aspx</trackback:ping>
        </item>
        <item>
            <title>Castle Scheduler</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/06/14/castle-scheduler.aspx</link>
            <description>&lt;p&gt;La suite &lt;a href="http://www.castleproject.org/" target="_blank"&gt;CastleProject&lt;/a&gt; si arricchisce di un nuovo componente: &lt;a href="http://using.castleproject.org/display/Comp/Castle.Components.Scheduler" target="_blank"&gt;Castle Scheduler&lt;/a&gt;.    &lt;br /&gt;Si tratta di un Job Scheduler simile al forse più famoso &lt;a href="http://quartznet.sourceforge.net/" target="_blank"&gt;Quartz.NET&lt;/a&gt;, porting della &lt;a href="http://www.quartz-scheduler.org/" target="_blank"&gt;omonima libreria Java&lt;/a&gt;.    &lt;br /&gt;Ovviamente, l’integrazione con &lt;a href="http://www.castleproject.org/container/index.html" target="_blank"&gt;Castle Windsor&lt;/a&gt; è &lt;a href="http://using.castleproject.org/display/Comp/Castle.Components.Scheduling-Tutorial" target="_blank"&gt;piuttosto semplice&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sourceforge.net/projects/castleproject/files/Scheduler/" target="_blank"&gt;Merita un’occhiata&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ce1356aa-4922-47ae-8841-6ce52f0915ef" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Castle" rel="tag"&gt;Castle&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/98785.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/06/14/castle-scheduler.aspx</guid>
            <pubDate>Mon, 14 Jun 2010 13:25:52 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/06/14/castle-scheduler.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/98785.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/98785.aspx</trackback:ping>
        </item>
        <item>
            <title>Servizi Windows autoinstallanti</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2010/05/09/servizi-windows-autoinstallanti.aspx</link>
            <description>&lt;p&gt;E’ noto che per installare un Windows Service bisogna ricorrere al tool &lt;a href="http://msdn.microsoft.com/en-us/library/50614e95(v=VS.100).aspx"&gt;InstallUtil&lt;/a&gt;, che si occupa di eseguire tutte le configurazioni necessarie affinche il nostro eseguibile possa essere gestito come servizio di sistema.&lt;/p&gt;  &lt;p&gt;Spesso si trovano eseguibili che possono operare come servizi di sistema semplicemente invocandoli con particolari parametri sulla linea di comando, ad esempio:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MyService.exe –installservice &lt;/li&gt;    &lt;li&gt;MyService.exe -uninstallservice &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Per aggiungere una funzionalità simile al nostro Windows Service, basta andare a curiosare all’interno di InstallUtil.exe con il fido Reflector, per accorgersi che in realtà il tool non fa altro che passare gli argomenti in ingresso sulla riga di comando alla classe &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.managedinstallerclass.aspx"&gt;ManagedInstallerClass&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/WindowsLiveWriter/ServiziWindowsautoinstallanti_70/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/Alby/WindowsLiveWriter/ServiziWindowsautoinstallanti_70/image_thumb.png" width="244" height="126" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Nulla ci vieta di fare la stessa cosa all’interno del nostro codice, quindi, dopo aver aggiunto la reference all’Assembly &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.aspx"&gt;System.Configuration.Install&lt;/a&gt;, possiamo aggiungere due metodi che si occupano di installare o disinstallare il servizio:&lt;/p&gt;  &lt;p /&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:0e9c0c5e-09fd-4a03-bf33-a61e5002561d" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:White;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Reflection;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Configuration.Install;

&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;readonly&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; _serviceExe &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Assembly.GetExecutingAssembly().Location;

&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; InstallService()
{
    ManagedInstallerClass.InstallHelper(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] { _serviceExe });
}

&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; UninstallService()
{
    ManagedInstallerClass.InstallHelper(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] { &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/u&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, _serviceExe });
}&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p /&gt;

&lt;p&gt;Fatto questo, basta controllare quali parametri sono stati specificati sulla linea di comando ed agire di conseguenza:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:3d4186df-89ef-4d23-9c85-b151b177329c" class="wlWriterEditableSmartContent"&gt;&lt;pre style="background-color:#FFFFFF;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (args.Length &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; (args[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].StartsWith(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt; args[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].StartsWith(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)))
{
    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;switch&lt;/span&gt;&lt;span style="color: #000000;"&gt; (args[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;].Substring(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;).ToLower())
    {
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;installservice&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;:
            InstallService();
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
        &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;uninstallservice&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;:
            UninstallService();
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
    }
}&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;In questo modo, possiamo fare il deploy del nostro servizio senza essere dipendenti da InstallUtil.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:03669941-9012-4f3f-8c5d-b3474b7fde5c" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows+Services" rel="tag"&gt;Windows Services&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/98530.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2010/05/09/servizi-windows-autoinstallanti.aspx</guid>
            <pubDate>Sun, 09 May 2010 20:25:46 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2010/05/09/servizi-windows-autoinstallanti.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/98530.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/98530.aspx</trackback:ping>
        </item>
        <item>
            <title>NHibernate in applicazioni desktop</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2009/12/10/nhibernate-in-applicazioni-desktop.aspx</link>
            <description>&lt;p&gt;Ho sempre notato che la maggior parte degli esempi e della documentazione che si trova in rete su &lt;a href="http://www.nhforge.org" target="_blank"&gt;NHibernate&lt;/a&gt; riguarda applicazioni web, e per me che ho sempre dato precedenza ad applicazioni Smart Client, è stato un problema, almeno all’inizio.&lt;/p&gt;  &lt;p&gt;Fortunatamente, il solito &lt;a href="http://ayende.com/blog/" target="_blank"&gt;Ayende&lt;/a&gt; è corso in nostro aiuto: su &lt;a href="http://msdn.microsoft.com/en-us/magazine/default.aspx" target="_blank"&gt;MSDN magazine&lt;/a&gt; è stato pubblicato un suo  articolo che tratta l’utilizzo di NHibernate in un’applicazione WPF, spiegando con quali tecniche gestire la concorrenza, il databinding e la Session in un contesto molto diverso da quello web quale è l’applicazione desktop.     &lt;br /&gt;Articolo interessante che merita una lettura: lo trovate &lt;a href="http://msdn.microsoft.com/en-us/magazine/ee819139.aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ffba0a4c-4457-4133-a1d4-0d2e258f09c2" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/97694.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2009/12/10/nhibernate-in-applicazioni-desktop.aspx</guid>
            <pubDate>Thu, 10 Dec 2009 15:50:25 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2009/12/10/nhibernate-in-applicazioni-desktop.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/97694.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/97694.aspx</trackback:ping>
        </item>
        <item>
            <title>Linq2NHibernate, FirstOrDefault e&amp;hellip; I Dire Straits</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2009/08/05/linq2nhibernate-firstordefault-ehellip-i-dire-straits.aspx</link>
            <description>&lt;p&gt;Tutti conosciamo i &lt;a target="_blank" href="http://it.wikipedia.org/wiki/Dire_Straits"&gt;Dire Straits&lt;/a&gt;, vero? Bene. &lt;/p&gt;
&lt;p&gt;La miglior formazione dei Dire Straits, a mio avviso, è stata quella composta da: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Mark_Knopfler"&gt;Mark Knopfler&lt;/a&gt; (voce e chitarra solista) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/John_Illsley"&gt;John Illsley&lt;/a&gt; (basso) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Hal_Lindes"&gt;Hal Lindes&lt;/a&gt; (chitarra ritmica) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Alan_Clark"&gt;Alan Clark&lt;/a&gt; (tastiere) &lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://it.wikipedia.org/wiki/Terry_Williams"&gt;Terry Williams&lt;/a&gt; (batteria) &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se provassimo a mappare il tutto in un modello ad oggetti, potremmo scrivere:&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:f97f4fd6-c0df-4c65-9c37-4e4c8e6beb3e" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;
&lt;pre style="overflow: auto; white-space: pre-wrap; word-wrap: break-word; background-color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Band  {         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; BandId { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; IList&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Player&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Members { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }  } &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Player {         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; PlayerId { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }         &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; FirstName { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; LastName { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; }     &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Band Band { &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;; } } &lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;E ora che abbiamo Linq2NHibernate possiamo scrivere una cosa del tipo: &lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:46936d2f-62e2-489f-bbd9-927702c52440" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;
&lt;pre style="overflow: auto; white-space: pre-wrap; word-wrap: break-word; background-color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (ISession session &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; SessionHelper.OpenSession())  {     Band myBand &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; session.Linq&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Band&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;().Expand(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Members&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)                     .Where&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Band&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(bnd &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; bnd.BandId &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)                     .FirstOrDefault&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Band&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();     Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Nome band: {0}, numero di componenti: {1}&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,          myBand.Name,          myBand.Members.Count);  } &lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;L'output però non è quello che ci aspettiamo: &lt;/p&gt;
&lt;p&gt;Nome band: Dire Straits, numero di componenti: 1 &lt;/p&gt;
&lt;p&gt;La causa è nel codice SQL generato da Linq2NHibernate, che, da Profiler, risulta essere questo:&lt;/p&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9770c189-e3f8-494f-b180-2e3b4038af88" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;
&lt;pre style="overflow: auto; white-space: pre-wrap; word-wrap: break-word; background-color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;exec&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; sp_executesql N&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;SELECT top 1 this_.BandId as BandId4_1_,  this_.Name as Name4_1_, members2_.BandId as BandId3_,  members2_.PlayerId as PlayerId3_, members2_.PlayerId as PlayerId2_0_,  members2_.FirstName as FirstName2_0_, members2_.LastName as LastName2_0_, members2_.BandId as BandId2_0_  FROM dbo.Band this_      left outer join dbo.Player members2_ on          this_.BandId=members2_.BandId  WHERE this_.BandId = @p0&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,N&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;@p0 int&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;@p0&lt;/span&gt;&lt;span style="color: rgb(128, 128, 128);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;1&lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;  &lt;/p&gt;
&lt;p&gt;In pratica, la chiamata a FirstOrDefault() aggiunge quel TOP 1 all’SQL generato, che fa sì che venga ritornata solo una riga ritornata dal DB, falsando il conteggio.    &lt;br /&gt;
I modi per risolvere la questione sono due: &lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Tornare ad usare la Criteria API :). &lt;/li&gt;
    &lt;li&gt;Sostituire &lt;font face="Courier New" size="2"&gt;FirstOrDefault&amp;lt;Band&amp;gt;()&lt;/font&gt; con &lt;font face="Courier New" size="2"&gt;ToList&amp;lt;Band&amp;gt;()[0]&lt;/font&gt;. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In questo modo, la clausola TOP sparisce e i Dire Straits tornano ad essere cinque: &lt;/p&gt;
&lt;p&gt;Nome band: Dire Straits, numero di componenti: 5&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a07a64ca-a579-4a80-8339-a01a9bad93a1" style="margin: 0px; padding: 0px; float: none; display: inline;"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/.NET"&gt;.NET&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/NHibernate"&gt;NHibernate&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Linq"&gt;Linq&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/96827.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2009/08/05/linq2nhibernate-firstordefault-ehellip-i-dire-straits.aspx</guid>
            <pubDate>Wed, 05 Aug 2009 11:50:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2009/08/05/linq2nhibernate-firstordefault-ehellip-i-dire-straits.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/96827.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/96827.aspx</trackback:ping>
        </item>
        <item>
            <title>Rilasciato NHibernate 2.1.0</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2009/07/20/rilasciato-nhibernate-2.1.0.aspx</link>
            <description>&lt;p&gt;E’ stata rilasciata la &lt;a href="http://sourceforge.net/projects/nhibernate/"&gt;versione 2.1.0&lt;/a&gt; di &lt;a href="http://www.nhforge.org"&gt;NHibernate&lt;/a&gt;. Qualche novità:&lt;/p&gt;  &lt;p&gt;1. Supporto diretto a SQL Server 2008 (MSSql2008Dialect); NHibernate può usare i tipi di dato &lt;em&gt;Date&lt;/em&gt;, &lt;em&gt;Time&lt;/em&gt;, &lt;em&gt;DateTime2&lt;/em&gt;, &lt;em&gt;DateTimeOffset&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;2. Nuovi &lt;a href="http://feedproxy.google.com/~r/NHibernateBlog/~3/SZ1UkIBlTY4/nh2-1-0-new-generators.aspx"&gt;ID Generators&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;3. Executable HQL. E’ possibile scrivere una cosa del tipo:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = GetSession())&lt;/pre&gt;

  &lt;pre&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ITransaction tx = session.BeginTransaction())&lt;/pre&gt;

  &lt;pre&gt;    { &lt;/pre&gt;

  &lt;pre class="alt"&gt;        session.CreateQuery(&lt;span class="str"&gt;"delete from MyEntity"&lt;/span&gt;).ExecuteUpdate();  &lt;/pre&gt;

  &lt;pre&gt;        tx.Commit();&lt;/pre&gt;

  &lt;pre class="alt"&gt;    }&lt;/pre&gt;

  &lt;pre&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[




.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;4. Rimozione della dipendenza da Castle.DynamicProxy2 (informazioni &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2008/10/11/nh2-1-0-reference-to-castle-removed.aspx"&gt;qui&lt;/a&gt; e &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx"&gt;qui&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;In ogni modo, la lettura del file releasenotes.txt è sempre consigliata.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/96730.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2009/07/20/rilasciato-nhibernate-2.1.0.aspx</guid>
            <pubDate>Mon, 20 Jul 2009 06:49:53 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2009/07/20/rilasciato-nhibernate-2.1.0.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/96730.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/96730.aspx</trackback:ping>
        </item>
        <item>
            <title>Aggiungere il link di &amp;quot;Rimuovi applicazione&amp;quot; nel setup project di Visual Studio 2008</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2008/12/30/95048.aspx</link>
            <description>&lt;p&gt;Ho creato un Setup Project per un'applicazione, e ho notato che non è così immediato aggiungere la voce "Rimuovi applicazione" come icona nel menù Start di Windows.&lt;/p&gt;  &lt;p&gt;L'ideale sarebbe creare un collegamento a &lt;font face="Courier New" size="2"&gt;msiexec.exe&lt;/font&gt; e fornire gli opportuni parametri per la disinstallazione, ma a quanto sembra, nel Setup Project di Visual Studio non è possibile referenziare tramite Shortcut un file non presente tra i files che compongono l'applicazione. Per ovviare a questo, ho aggiunto tra i files dell'applicazione un file &lt;font face="Courier New" size="2"&gt;Uninstall.bat&lt;/font&gt; contenente questi comandi:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;@echo off      &lt;br /&gt;msiexec /I {Product Code}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;dove &lt;em&gt;Product Code&lt;/em&gt; è un particolare GUID assegnato all'applicazione, che serve a Windows Installer per identificarla univocamente; lo si può trovare alla rispettiva voce tra le proprietà del progetto di setup.     &lt;br /&gt;Ora è possibile creare un collegamento a questo file, che si preoccuperà di eseguire il setup dell'applicazione in modalità "maintenance", permettendone la rimozione.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/95048.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2008/12/30/95048.aspx</guid>
            <pubDate>Tue, 30 Dec 2008 18:55:52 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2008/12/30/95048.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/95048.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/95048.aspx</trackback:ping>
        </item>
        <item>
            <title>XNA Game Studio 3.0</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2008/11/04/xna-game-studio-3.0.aspx</link>
            <description>&lt;p&gt;&lt;img style="MARGIN: 0px 10px 0px 0px" align="left" alt="" src="http://creators.xna.com/en-US/assets/images/global/shell_default/cco_shell_default_header_xna_logo_print.jpg" /&gt; Ok, è ufficiale: la mia vita sociale potrebbe essere seriamente compromessa. Con il rilascio di &lt;a target="_blank" href="http://creators.xna.com/en-US/xnags_islive"&gt;XNA Game Studio 3.0&lt;/a&gt;, la mia passione per i videogiochi potebbe unirsi alla mia passione per la programmazione, producendo risultati imprevedibili.&lt;/p&gt;
&lt;p&gt;Qualcuno in casa mia è già preoccupato, ma prometto che cercherò di controllarmi... &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/94517.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2008/11/04/xna-game-studio-3.0.aspx</guid>
            <pubDate>Tue, 04 Nov 2008 18:30:29 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2008/11/04/xna-game-studio-3.0.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/94517.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/94517.aspx</trackback:ping>
        </item>
        <item>
            <title>&amp;quot;Strumenti per la luce d'argento&amp;quot;</title>
            <link>http://blogs.ugidotnet.org/Alby/archive/2008/10/31/quotstrumenti-per-la-luce-dargentoquot.aspx</link>
            <description>&lt;p&gt;&lt;img style="margin: 0px 10px 0px 0px" src="http://www.microsoft.com/silverlight/images/logo.png" align="left" /&gt; Sono stati rilasciati i Silverlight Tools per Visual Studio 2008 SP1, i quali erano in beta al momento del rilascio di Silverlight 2.0.&lt;/p&gt;  &lt;p&gt;Il pacchetto completo si può scaricare &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Vediamo se adesso anch'io riesco a far brillare la "luce d'argento". &lt;img alt="" src="/Providers/BlogEntryEditor/FCKeditor/editor/images/smiley/msn/teeth_smile.gif" /&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/Alby/aggbug/94475.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Alberto Dallagiacoma</dc:creator>
            <guid>http://blogs.ugidotnet.org/Alby/archive/2008/10/31/quotstrumenti-per-la-luce-dargentoquot.aspx</guid>
            <pubDate>Fri, 31 Oct 2008 17:59:01 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/Alby/archive/2008/10/31/quotstrumenti-per-la-luce-dargentoquot.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/Alby/comments/commentRss/94475.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/Alby/services/trackbacks/94475.aspx</trackback:ping>
        </item>
    </channel>
</rss>
