<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>VISUAL STUDIO</title>
        <link>http://blogs.ugidotnet.org/martinobordin/category/VISUAL STUDIO.aspx</link>
        <description>My adventures in the VISUAL STUDIO world</description>
        <language>it</language>
        <copyright>Martino Bordin</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Accedere a siti su IIS Express dall&amp;rsquo;esterno</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2017/01/04/accedere-a-siti-su-iis-express-dallrsquoesterno.aspx</link>
            <description>Come sapete non è possibile, salvo configurazioni un pò macchinose, accedere a siti ospitati su IIS Express dall'esterno (altri PC\VM\dispositivi).

Esiste tuttavia un modo molto più semplice, che richiede l’installazione di un proxy via NPM npm install -g iisexpress-proxy Una volta installato, basta eseguire il comando  iisexpress-proxy 51123 to 3000

Dove 

51123 è la porta IIS a cui il sito è raggiungibile (che è dinamica) 
3000 è la porta al quale il sito risponderà all’esterno, usando l’ip della scheda di rete primaria.
Se l’ip del mio PC è 192.168.230.126, Il sito sarà ora raggiungibile dall’esterno all’indirizzo: http://192.168.230.126:3000

Su GitHub trovate i dettagli del progetto.&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/102318.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2017/01/04/accedere-a-siti-su-iis-express-dallrsquoesterno.aspx</guid>
            <pubDate>Wed, 04 Jan 2017 17:40:57 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2017/01/04/accedere-a-siti-su-iis-express-dallrsquoesterno.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/102318.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/102318.aspx</trackback:ping>
        </item>
        <item>
            <title>Creare servizi Windows con Topshelf</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2015/10/20/creare-servizi-windows-con-topshelf.aspx</link>
            <description>Da un pò di tempo, quando devo creare un Windows Service, utilizzo la libreria Topshelf, che permette di sviluppare una normale applicazione console e, una volta impostate le opportune configurazioni mediante sintassi fluent, installarla facilmente come windows service, senza tool esterni quali installutil.  Un’applicazione console, oltre ad essere più facile da debuggare, è anche eseguibile direttamente (a differenza di un windows service).  Vediamo quindi come creare un servizio.  1) Apriamo Visual Studio e selezionamo il progetto di tipo “Applicazione console”


     2) Creiamo una nuova classe che esponga 2 metodi che verranno chiamati allo start e allo stop del servizio  internal class MyConsoleService 
    { 
        public void Start() 
        { 
            System.IO.File.AppendAllText("MyConsoleService.text", string.Format("MyConsoleService start {0}{1}", DateTime.Now, Environment.NewLine)); 
        }

        public void Stop() 
        { 
            System.IO.File.AppendAllText("MyConsoleService.text", string.Format("MyConsoleService start {0}{1}", DateTime.Now, Environment.NewLine)); 
        } 
    }

 

3) Nel metodo Main della classe Program, andiamo a definire i parametri di configurazione del nostro servizio (vi rimando alla documentazione per la spiegazione dettagliata)

class Program 
    { 
        static void Main(string[] args) 
        { 
            HostFactory.Run(hostConfigurator =&amp;gt; 
            { 
                hostConfigurator.Service&amp;lt;MyConsoleService&amp;gt;(serviceConfigurator =&amp;gt; 
                { 
                    serviceConfigurator.ConstructUsing(() =&amp;gt; new MyConsoleService()); 
                    serviceConfigurator.WhenStarted(service =&amp;gt; service.Start()); 
                    serviceConfigurator.WhenStopped(service =&amp;gt; service.Stop()); 
                });

                hostConfigurator.RunAsNetworkService(); 

                hostConfigurator.StartAutomatically(); // Autostart del Servizio

                hostConfigurator.SetDisplayName("MyConsoleApp Service"); // Nome visualizzato nell'elenco servizi di services.msc 
                hostConfigurator.SetDescription("Servizio creato utilizzando Topshelf"); //  Descrizione visualizzata nell'elenco servizi di services.msc 
                hostConfigurator.SetServiceName("MyConsoleAppService"); // Nome del servizio 
            }); 
        } 
    }

4) Per installare il servizio lanciamo l’exe con il parametro install (digitare il parametro help per vedere l’elenco completo dei comandi)




 

5) Apriamo la console dei servizi di WIndows e verifichiamo la corretta installazione del servizio




 

6) Avviamo il servizio e controlliamo la creazione del file




 

Come potete vedere Topshelf è molto versatile quanto poco invasivo (solo il passo 3 è relativo alla configurazione dell’infastruttura).

Dategli un’occhiata e dimenticherete presto come si crea un windows service, il relativo installer e il tool installutil.&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/102057.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2015/10/20/creare-servizi-windows-con-topshelf.aspx</guid>
            <pubDate>Tue, 20 Oct 2015 11:53:19 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2015/10/20/creare-servizi-windows-con-topshelf.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/102057.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/102057.aspx</trackback:ping>
        </item>
        <item>
            <title>Generare il modello EDMX con EF CodeFirst</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2015/02/05/generare-il-modello-edmx-con-ef-codefirst.aspx</link>
            <description>A volte potrebbe tornare utile avere la rappresentazione visuale del modello CodeFirst che stiamo utilizzando, ovvero datto il DbContext CodeFirst, ottenere il file EDMX corrispondente:

Il tutto è facilmente ottenibile con poche righe di codice:
&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/101938.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2015/02/05/generare-il-modello-edmx-con-ef-codefirst.aspx</guid>
            <pubDate>Thu, 05 Feb 2015 11:31:25 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2015/02/05/generare-il-modello-edmx-con-ef-codefirst.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/101938.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/101938.aspx</trackback:ping>
        </item>
        <item>
            <title>Code Coverage e Test Settings</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2012/11/06/code-coverage-e-test-settings.aspx</link>
            <description>Il code coverage è un'indice importante per avere un'idea della percentuale di codice coperto da unit-test.
Se utilizzate il framework di unit-test Microsoft (MSTest), Visual Studio è in grado di calcolare tale indice automaticamente (maggiori dettagli qui).
Tempo fa avevo instrumentato questo tool su un mio progetto ed oggi, dopo aver fatto refactoring ed aggiunto alcune funzionalità, volevo visualizzare i dati di code coverage.
Lanciando il tool, ottenevo tuttavia questo messaggio:
"Cannot find any coverage data (.coverage or .coveragexml) files. Check test run details for possible errors."
 Dopo un pò di verifiche ho scoperto l'inghippo: per qualche motivo il file di impostazioni dei test corrente era "Trace and Test Impact" e non "Local".
&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/101310.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2012/11/06/code-coverage-e-test-settings.aspx</guid>
            <pubDate>Tue, 06 Nov 2012 17:55:54 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2012/11/06/code-coverage-e-test-settings.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/101310.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/101310.aspx</trackback:ping>
        </item>
        <item>
            <title>Manipolazione di file zip con il framework 4.5</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2012/08/23/manipolazione-di-file-zip-con-il-framework-4.5.aspx</link>
            <description>Dalla versione 4.5 del .NET framework è finalmente supportata out-of-the-box la manipolazione di file zip senza l'utilizzo di librerie di terze parti.
Sono ora disponibili infatti 2 assembly System.IO.Compression e System.IO.Compression.FileSystem che permettono, ad esempio, di enumerare i file presenti in uno zip, estrarli, creare nuovi file zip, etc.
Ad esempio, ecco come si ottiene l'elenco dei file contenuti in uno zip:
  const string zipFilePath = @"C:\temp\files.zip";

    using (FileStream zipFileToOpen = new FileStream(zipFilePath, FileMode.Open)){
    using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Read)) {

        foreach (var zipArchiveEntry in archive.Entries) {
            Console.WriteLine("File name: {0}", zipArchiveEntry.FullName);}
    }}

E come si estraggono in una directory:
const string zipFilePath = @"C:\temp\files.zip";
    const string dirToExtract = @"C:\temp\";

    using (FileStream zipFileToOpen = new FileStream(zipFilePath, FileMode.Open)) {
    using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Update))
        archive.ExtractToDirectory(dirToExtract);}}

Vi lascio quindi i riferimenti di MSDN:
ZipArchive Class
System.IO.Compression
 
 &lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/101170.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2012/08/23/manipolazione-di-file-zip-con-il-framework-4.5.aspx</guid>
            <pubDate>Thu, 23 Aug 2012 11:38:09 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2012/08/23/manipolazione-di-file-zip-con-il-framework-4.5.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/101170.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/101170.aspx</trackback:ping>
        </item>
        <item>
            <title>Merge di DLL in un&amp;rsquo;applicazione WPF</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2012/04/05/merge-di-dll-in-unrsquoapplicazione-wpf.aspx</link>
            <description>Recentemente ho dovuto creare un’applicazione WPF che fosse facilmente distribuibile (leggi: distribuire solo l’exe).   Purtroppo il tool ILMerge non funziona per applicazioni WPF, a causa di problemi con le risorse contenute in esse (esistono comunque tool funzionanti di terze parti, a pagamento).  Seguendo questo post, ho creato un esempio che qui illustro e che potete scaricare qui.  L’applicazione visualizza semplicemente il fullname di due classi presenti in 2 assembly referenziati:       Per prima cosa è necessario modificare il file di progetto dell’applicazione WPF aggiungendo, dopo “Microsoft.CSharp.targets” , il seguente snippet:      &amp;lt;Target Name="AfterResolveReferences"&amp;gt;     &amp;lt;ItemGroup&amp;gt;       &amp;lt;EmbeddedResource Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.Extension)' == '.dll'"&amp;gt;         &amp;lt;LogicalName&amp;gt;%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)&amp;lt;/LogicalName&amp;gt;       &amp;lt;/EmbeddedResource&amp;gt;     &amp;lt;/ItemGroup&amp;gt;   &amp;lt;/Target&amp;gt;      Semplicemente, andiamo ad indicare di inserire tutti i file referenziati con estensione “.dll” come “emdedded resource” nell’exe principale. In questo modo eviteremo di eseguire a mano l’inclusione dell’ultima versione delle librerie compilate.  Nelle proprietà del progetto, impostiamo il seguente comando da eseguire durante la fase di post-build: “del $(TargetDir)*.dll” per cancellare tutte le librerie presenti nella “bin”, che non ci serviranno più...       Impostiamo quindi come oggetto di avvio la classe Bootstrapper (potete ovviamente cambiare il nome):       Questa, infine, è come definita la classe BootStrapper:      public class BootStrapper {     [STAThread]     public static void Main(string[] args)     {         AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;         App.Main();     }       private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)     {         var executingAssembly = Assembly.GetExecutingAssembly();         var assemblyName = new AssemblyName(args.Name);           string path = string.Format("{0}.dll", assemblyName.Name);         if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false)         {             path = string.Format(@"{0}\\cf4 {1}", assemblyName.CultureInfo, path);         }           using (var stream = executingAssembly.GetManifestResourceStream(path))         {             if (stream == null)             {                 return null;             }               var assemblyRawBytes = new byte[stream.Length];             stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);             return Assembly.Load(assemblyRawBytes);         }     } }         Sostanzialmente ci agganciamo all’evento AssemblyResolve dell’AppDomain corrente, che viene sollevato ogni volta che la risoluzione di un’assembly fallisce, e ritorniamo l’assembly che abbia in canna nelle embedded resources.  Ecco infatti come si presenta il nostro exe “aprendolo” con ILSpy:    E’ anche più semplice di usare la riga di comando di ILMerge ! &lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100921.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2012/04/05/merge-di-dll-in-unrsquoapplicazione-wpf.aspx</guid>
            <pubDate>Thu, 05 Apr 2012 15:07:51 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2012/04/05/merge-di-dll-in-unrsquoapplicazione-wpf.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100921.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100921.aspx</trackback:ping>
        </item>
        <item>
            <title>Gestione di namespace e cartelle in Visual Studio</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/12/20/gestione-di-namespace-e-cartelle-in-visual-studio.aspx</link>
            <description>Come tutti sapete all’interno di Visual Studio (pannello “Solution Explorer”) è possibile creare cartelle in cui andremo inserire le nostre classi.  Per impostazione predefinita, la struttura di queste cartelle andrà a definire quello che viene chiamato Fully qualified name (FQN), ovvero il nome che identifica in modo univoco la nostra classe: Namespace.NomeClasse.  Pertanto, se la nostra solution è organizzata in questo modo      il FQN di customer sarà Sample.Domain.Customer.  Mano a mano che il progetto cresce potremmo trovarci in situazioni in cui la cartelle contengono raggruppamenti logici di file che tuttavia non vogliamo entrino in gioco nella costruzione del FQN.  Per esempio, se nella cartella Domain creiamo una sottocartella Customer     Resharper ci segnala che il namespace della classe non è coerente  con la posizione del file:    Per risolvere il “problema” (ovviamente il progetto compila lo stesso, ma è una segnalazione utile per mantenere lo standard qualitativo del codice) basta impostare a False la voce “Namespace Provider” tra le proprietà della cartella.  &lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100640.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/12/20/gestione-di-namespace-e-cartelle-in-visual-studio.aspx</guid>
            <pubDate>Tue, 20 Dec 2011 13:34:59 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/12/20/gestione-di-namespace-e-cartelle-in-visual-studio.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100640.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100640.aspx</trackback:ping>
        </item>
        <item>
            <title>Sviluppare applicazioni mobile con ASP.NET MVC3</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/09/22/sviluppare-applicazioni-mobile-con-asp.net-mvc3.aspx</link>
            <description>Come tutti sapete, la fruizione di un sito web non è più esclusiva di dispositivi Desktop, affiancati oramai da device quali smartphone e tablet di vario tipo.  Offrire una User Experience degna di tale nome anche per gli utenti che accedono ai nostri siti con questi dispositivi è diventata quindi una priorità.  Il team di ASP.NET fornirà con MVC 4 pieno supporto al mobile, e sono già disponibili esempi che illustrano le funzionalità della prossima versione: ASP.NET MVC 4 Mobile Features.  In MVC3 è possibile generare pagine ottimizzate seguendo i seguenti passaggi.     Create un progetto MVC3 (usando indifferentemente Razor o ASPX);     Scaricate, via NuGet, il package MobileViewEngines(eventualmente quello contenente i Sample, che creerà delle pagine di esempio). Il package contiene i file MobileCapableRazorViewEngine e MobileCapableWebFormViewEngine (sia cs che vb). Come lasciano intuire i nomi, sono l’implementazione di 2 ViewEngine basati su Razor e WebForm in grado di renderizzare viste diverse in base al dispositivo che sta richiedendo la pagina. Per essere utilizzati dal runtime di ASP.NET è necessario registrarli nel file global.asax in questo modo:        protected void Application_Start() {     AreaRegistration.RegisterAllAreas();       RegisterGlobalFilters(GlobalFilters.Filters);     RegisterRoutes(RouteTable.Routes);       ViewEngines.Engines.Insert(0, new MobileCapableRazorViewEngine());     ViewEngines.Engines.Insert(0, new MobileCapableWebFormViewEngine()); }         Scaricate, sempre via NuGet, il package 51Degrees. Questo package, come recita la descrizione, rileva i dispositivi mobili, fornisce informazioni dettagliate su questi ed effettua il redirect verso le pagine Web ottimizzate per il mobile. Quest’ultimo passaggio, tuttavia, verrà effettuato dal nostro MobileViewEngine e pertanto va rimosso. Per fare questo basta cancellare il tag redirect presente nel file 51Degrees.mobi.config nella cartella App_Data (il file è ben documentato, dategli una letta!).          &amp;lt;redirect firstRequestOnly="true"            mobileHomePageUrl="~/Mobile/Default.aspx"            timeout="20"            devicesFile="~/App_Data/Devices.dat"            mobilePagesRegex="/Mobile/"&amp;gt;   &amp;lt;/redirect&amp;gt;           A questo punto possiamo iniziare a creare le View ottimizzate per dispositivi mobile (utilizzando jQuery mobile e quant’altro) semplicemente inserendo il suffisso Mobile nel nome (es: Index.Mobile.cshtml o Index.Mobile.aspx ).       Ecco quindi il risultato visualizzato su vari device:    PS: Per testare le pagine su dispositivi mobili potete utilizzare gli emulatori presenti nei rispettivi SDK (es: WinPhone7) o in alternativa scaricare il programma Mobilizer.     Alla prossima.&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100373.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/09/22/sviluppare-applicazioni-mobile-con-asp.net-mvc3.aspx</guid>
            <pubDate>Thu, 22 Sep 2011 11:40:24 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/09/22/sviluppare-applicazioni-mobile-con-asp.net-mvc3.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100373.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100373.aspx</trackback:ping>
        </item>
        <item>
            <title>Blendability con Moq e NBuilder</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2011/08/09/blendability-con-moq-e-nbuilder.aspx</link>
            <description>Che il vostro progetto sia sviluppato in WPF, Silverlight o Silverlight per WP7 un aspetto fondamentale (direi quasi un requisito non funzionale) da soddisfare è il supporto ai designer di Visual Studio/Blend, identificato con il termine “Blendability”.  Anche se può sembrare banale, in realtà la faccenda si complica man mano che i nostri ViewModel prendono forma e utilizziamo IoC.  In soldoni il Designer non è in grado di rappresentare graficamente una View collegata ad un ViewModel di questo tipo:      public MainViewModel(IPersonService personService) {     People = new ObservableCollection&amp;lt;Person&amp;gt;(personService.GetAll());       ShowPersonDetailCommand = new RelayCommand(PerformShowPersonDetail, CanShowPersonDetail); }         Tra le soluzioni possibili troviamo:     utilizzare un ViewModelLocator che restituisce istanze diverse dei ViewModel se siamo a design-time o a run-time (es: link)     utilizzare ViewModel che si comportano in modo diverso se siamo a design-time o a run-time (es: link)     utilizzare file XAML in cui definire i dati fake (es: link)    Personalmente, anche se funzionanti, non mi piace nessuna delle soluzioni proposte in quanto:     vado ad inserire logica completamente estranea ai ViewModelLocator\ViewModel (punti 1, 2)     mi ritrovo a manutenere file XAML satelliti che andranno ad appesantire il refactoring (punto 3)    Da un po' di tempo a questa parte sto adottando la strategia che da il titolo a questo post: uso Moq e NBuilder.   Per chi non li conoscesse, sono 2 librerie che facilitano la scrittura di test automatici, essendo rispettivamente un framework di mocking e un tool per la generazione dinamica di oggetti.   Nonostante siano strumenti nati per altri scopi, ho deciso di provarli per ottenere ViewModel “blendabili”.  In pratica:     Vado a creare, possibilmente in un assembly a parte, un MainViewModelDesign  che eredita dal MainViewModel visto in precedenza.        public class MainViewModelDesign : MainViewModel {     public MainViewModelDesign()         : base(GetMockedService())     {     } }         Il Metodo GetMockedService mi ritorna un mock che implementa IPersonService e va a definire i metodi utilizzati dal ViewModel in questione. In questo caso ho instrumentato Moq in maniera tale che, quando viene invocato il metodo GetAll, mi restituisca, tramite la classe Builder di NBuilder, un elenco di Person.        private static IPersonService GetMockedService() {     var mockedService = new Mock&amp;lt;IPersonService&amp;gt;();     mockedService         .Setup(s =&amp;gt; s.GetAll())         .Returns(Builder&amp;lt;Person&amp;gt;.CreateListOfSize(5).Build());         return mockedService.Object; }         Per collegare il nostro nuovo ViewModel useremo il Databinding e la proprietà d: DataContext, utilizzando la markup extension {d: DesignInstance} (maggiori info qui),  passando il nome del ViewModel che vogliamo venga creato automaticamente dal designer  (riga 12):        &amp;lt;Window      x:Class="Blendability.Views.MainWindow"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     xmlns:viewModels="clr-namespace:Blendability.ViewModels.Design"     Title="People"      Height="350"      Width="525"     mc:Ignorable="d"     d:DataContext="{d:DesignInstance viewModels:MainViewModelDesign, IsDesignTimeCreatable=True}"      DataContext="{Binding Source={StaticResource locator}, Path=MainViewModel}"&amp;gt;      Ovviamente possiamo ancora impostare la “solita” proprietà DataContext che verrà effettivamente utilizzata a runtime (riga 13).  A questo punto se apro Visual Studio o Blend avrò pieno supporto del designer:             Riassumendo:     ho definito un ViewModel che eredita dal ViewModel reale, e si preoccupa solo di visualizzare i dati (e che andrò a mettere su un assembly a parte) ed eventuale logica di generazione dei dati fake (tra l’altro NBuilder è abbastanza versatile e posso definire regole del tipo “le prime 5 Person devono avere Name = “Nome123abc” e DateOfBirth = “01/02/2003”, le restanti Name = “blablabla")     se farò refactoring non dovrò cambiare file XAML se non la View vera e propria     ho il pieno supporto dei designer: editing di stili\template con preview instantanea, animazioni, property window, etc     funziona per progetti WPF\ SL e WP7!    Ho preparato un esempio un pò più articolato di quello illustrato che potete scaricare qui. Ovviamente tutto quello che vedrete aprendo il designer NON lo vedrete a runtime .  Cosa ne pensate? Come ottenete la blendability di solito nei vostri progetti?&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/100261.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2011/08/09/blendability-con-moq-e-nbuilder.aspx</guid>
            <pubDate>Tue, 09 Aug 2011 15:59:27 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2011/08/09/blendability-con-moq-e-nbuilder.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/100261.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/100261.aspx</trackback:ping>
        </item>
        <item>
            <title>Cambiare il linguaggio di default di Visual Studio</title>
            <link>http://blogs.ugidotnet.org/martinobordin/archive/2010/08/19/cambiare-il-linguaggio-di-default-di-visual-studio.aspx</link>
            <description>Installando Visual Studio 2010 per sbaglio ho selezionato Visual Basic  come linguaggio predefinito..ovviamente, sviluppando prevalentemente in  C#, sarebbe cosa buona e giusta avere C# come linguaggio di  default..come fare ad impostarlo?
Navigando nei menù ho trovato che è possibile resettare i settings  cliccando su Tools-&amp;gt; Import and Export Settings-&amp;gt; Reset all  settings. Si aprirà un wizard che vi darà modo di salvare i settings  attuali e scegliere quali nuovi settings impostare..

C# rulez!&lt;img src="http://blogs.ugidotnet.org/martinobordin/aggbug/99092.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Martino Bordin</dc:creator>
            <guid>http://blogs.ugidotnet.org/martinobordin/archive/2010/08/19/cambiare-il-linguaggio-di-default-di-visual-studio.aspx</guid>
            <pubDate>Thu, 19 Aug 2010 19:20:50 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/martinobordin/archive/2010/08/19/cambiare-il-linguaggio-di-default-di-visual-studio.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/martinobordin/comments/commentRss/99092.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/martinobordin/services/trackbacks/99092.aspx</trackback:ping>
        </item>
    </channel>
</rss>