Visual studio 2008 ide crash dopo "Choose items" dalla toolbox

Qualche giorno fa mi sono imbattuto in uno strano crash di Visual Studio 2008, dopo aver installato il Service Pack 1, vale a dire che il comando “Choose items” della toolbox era capace di mandare in crash l’intero IDE, scrivendo un laconico messaggio nell’Event viewer, del tipo

NET Runtime version 2.0.50727.3053 – Fatal Execution Engine Error (7A035E00) (80131506)

di nessuna utilità per la risoluzione del problema,  senza possibilità di scampo quindi. Dopo aver cercato invano per la rete per evitare di perdere ulteriore tempo ho evitato di disporre del controllo che mi interessava nella toolbox (precisamente una PropertyGrid) e l’ho inserito direttamente nel markup XAML della mia applicazione (una XBAP application).

Oggi ho letto questo post di Nazareno e speravo veramente di risolvere il problema, anche perchè questa volta la toolbox era indispensabile poichè dovevo inserire una intera suite di controlli.

Purtroppo non c’è stato niente da fare. Il problema sparisce solo dopo aver disinstallato i Power Commands, senza più reinstallarli.  Ma sono abituato ai Power Commands  e li trovo veramente utili.

Vale a dire che li disintallerò solo per utilizzare la toolbox, e poi li reinstallerò di nuovo…:-)

Creare una "full trust" xbap application

Come chi programma in WPF ben sa, una applicazione WPF browser, meglio nota come XBAP application, gira all’interno del browser in un ambiente partial trust, oppure in una sandbox di sicurezza, come meglio si preferisce, per evitare appunto che il codice di una tale applicazione possa accedere a informazioni confidenziali oppure effettuare azioni non autorizzate. In particolari scenari, tuttavia, ad esempio in applicazioni Intranet, può nascere l’esigenza di dotare tali applicazioni di un maggior numero di permessi, oppure addirittura farle girare in ambiente full trust.

Bene, visto che per default una XBAP application viene eseguita in modalità partial trust, quali sono i passaggi necessari per farla funzionare invece in un ambiente full trust ?. Questo è il motivo di questo post. Di seguito elenco i passaggi che ho dovuto effettuare per raggiungere tale obiettivo, anche se alcuni sono un pò contorti e mi fanno dubitare di aver intrapreso la strada migliore, ma alla fine comunque il tutto ha funzionato:

  • Occorre far si che il processo che ospita la XBAP application non venga eseguito con un process token povero di privilegi. Per far questo è necessario intervenire sul Registry (non sono però certo che non esistano metodi più comodi).  Occorre posizionarsi sulla chiave:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Hosting

e creare un valore DWORD denominato RunUnrestricted ed assegnargli il valore 1.

  • Nella scheda Security, accessibile dalle proprietà del progetto, occorre scegliere come zona il valore “Custom” al posto di “Internet”. Lasciare il valore di default “This is a partial trust application” e non spuntare “This is a full trust application” come invece la logica vorrebbe. Se si sceglie “full trust” senza cambiare la zona (lasciando il valore di default) il meccanismo non funzionerà. Dopo aver fatto questa modifica, riaprendo la scheda Security, si noterà come sia spuntato il valore “full trust” e la zona sia impostata a “Custom” e non modificabile.
  • Nel file app.manifest dell’applicazione occorre aggiungere l’attributo Unrestricted=”true”
  • Se si vuol lanciare la propria applicazione mediante un url http, occorre firmare il manifest con un certificato digitale X.509. Quando creiamo la nostra applicazione XBAP Visual Studio genera un file con estensione “pfx”. Questo file rappresenta un certificato digitale temporaneo da usare a scopo di test. Occorrerà solo registrare tale certificato in Internet Exporer, scegliendo da menù Tools l’opzione “Options“, la scheda “Content” ed il pulsante “Certificates“. A questo punto click sul pulsante “Import” e partirà il wizard di importazione del certificato, dove attraverso vari passaggi il certificato di test sarà registrato (occorre scegliere come store  “Trusted root Certification Authorities“). E’ comunque possibile generare un certificato di test direttamente da Visual Studio, scegliendo la scheda “Signing” dalle proprietà del progetto e successivamente cliccando il pulsante “Create Test Certificate“. A questo punto partirà un wizard che permetterà la creazione e la esportazione del certificato in un file “pfx“, onde consentire la successiva importazione in Internet Explorer.

A questo punto eseguendo l’applicazione via web essa funzionerà con tutti i permessi assegnati (full trust).

Impossibile aggiungere una service reference in visual studio 2008

Questo workaround spero sia utile a chi si è trovato nella stessa mia situazione, e cioè che improvvisamente Visual Studio 2008 si rifiuta di aggiungere una Service Reference ad un servizio WCF, dando questo errore:

The components required to enumerate web references are not installed on this computer. Please re-install Visual studio.

Ho poi scoperto che il problema si presentava anche aggiungendo semplici web reference (ASP .NET web services) a progetti creati con Visual Studio 2005.

Per risolvere il problema non è mica necessario reinstallare Visual Studio 🙂

Basta lanciare l’ambiente di sviluppo da prompt dei comandi (quello di Visual Studio) con il parametro /resetskippkgs, quindi in questo modo:

devenv /resetskippkgs

Il parametro /resetskippkgs impedisce che siano caricati eventuali VSPackages aggiuntivi, che potrebbero creare problemi con lo startup dei componenti di Visual Studio. Era proprio quello che accadeva a me. Chiaramente basta lanciare solo una volta Visual Studio in quel modo, giusto per disabilitare il caricamento dei VSPackages.

Visual source safe – troubleshooting

Nel mio lavoro quotidiano come consulente uso spesso e volentieri Visual Source Safe (sigh!)  come repository del codice sorgente. Come chi già lo usa sicuramente ben sa, Source Safe è un prodotto ormai datato che si porta dietro un pò di problemi di varia natura. Quindi, non è sempre facile “addomesticarlo” per ottenere quello che si vuole. Appunto un paio di workaround su come evitare certe situazioni che possono portare a problemi:

  1. Se si usa una cartella diversa da c:\inetpub\wwwroot per salvare i propri progetti web, non usare mai il comando File|Open fron Source Control. Questo comando, a dispetto della working folder impostata, salverà sempre il progetto web in una sottodirectory della directory c:\inetpub\wwwroot, con il risultato di avere una doppia copia del progetto web sulla propria macchina se si è scelto di utilizzare una directory differente per il proprio progetto. Questo comportamento si può evitare impostando la virtual directory della propria applicazione (che dovrà puntare alla directory fisica prescelta) PRIMA di eseguire il comando “Open from Source Control”.
  2. Source Safe NON è transazionale, quindi un crash del sistema nel bel mezzo di una operaizione di scrittura porta quasi sempre a corruzione del database, non sempre risolvibili attraverso l’utility “Analyze
  3. L’esecuzione del comando “Analyze” come pure di altri comandi di diagnostica non và a buon fine se risultano utenti ancora connessi al database; questo è anche logico, se non fosse per il fatto che non esiste un metodo “pulito” per disconnettere utenti che risultano ancora connessi. Per far questo occorre utilizzare alcuni strumenti del sistema operativo per disconnettere forzatamente un utente dalla rete.
  4. Effettuare un backup dell’intero database quanto più frequentemente possibile

IIS ASP .NET Tab missing

Vi è mai capitato che nella console di amministrazione di IIS per una certa web application sparisse il tab ASP .NET senza apparente motivo ?

A me sì, con tutte le conseguenze del caso, e senza che riuscissi a trovare una soluzione nei forum e user group. Ora finalmente la soluzione esiste.

E’ spiegata in modo dettagliato in questo post, ed inoltre, come afferma l’autore del post, non esiste nessuna soluzione immediata che pone riparo a questa anomalia. 

Problemi di performance in Visual Studio 2008

Ero praticamente certo che sarebbe uscita la hotfix giusta per me riguardante Visual Studio 2008.

Negli ultimi tempi ho sperimentato in prima persona rallentamenti eccessivi e chiaramente molto fastidiosi nell’utilizzo di alcune funzionalità dell’IDE e precisamente:

  • Passando alla vista Design di una Web Form;
  • Passando alla vista Html Source di una Web Form;
  • Compilando un progetto web di grosse dimensioni;

Oggi ho scoperto che da pochissimo tempo è disponibile una hotfix che risolve tutti e tre i problemi sopradescritti.

Link per il download.

Troubleshooting remote assistance

Per una volta parlo di come risolvere un piccolo ma noioso problema sistemistico: provando ad utilizzare l’assistenza remota di MSN mi appariva questo strano errore:

“Impossibile aprire la Guida in linea e supporto tecnico perchè un servizio di sistema non è in esecuzione. Per risolvere il problema, avviare il servizio denominato ‘Help Service”

Il servizio in questione, chiamato “Guida in linea e supporto tecnico” nella versione italiana, è chiaramente la Guida in linea di Windows XP, che evidentemente non era presente sulla macchina. Ma l’aspetto più imbarazzante era che non  vi era nessun  servizio chiamato in quel modo tra l’elenco dei servizi di Windows.  Quindi, come  (re)installare la Guida  in linea ?  In questi casi, come al solito, non esiste aiuto migliore dei gruppi di discussione sull’argomento specifico.

Ecco come procedere:

  • Browse della directory c:\windows\inf e cercare il file pchealth.inf. Click destro e scegliere installa.
  • Al temine, installare il servizio attraverso questo comando: Start /w helpsvc /svchost netsvcs /regserver /install 
  • Al termine dell’installazione riavviare Windows XP,  ed ecco che magicamente comparirà il servizio in questione tra i servizi di Windows

Con il servizio avviato, l’assistenza remota di Windows non dà più problemi.

Ora mi chiedo: cosa c’entra la guida in linea di Windows con l’assistenza remota. ?

P.S: Un grazie a Rossano Orlandini, MVP Windows Server, per la soluzione al problema.

Non esiste solo l’informatica

In questi giorni di vacanze forzate a casa per via di qualche ‘problemuccio’ di salute (per fortuna é passato tutto :)) ho riassaporato 2 tra le mie passioni più grandi: la musica e la lettura. Ho letto altri libri nel frattempo usciti della saga di Carlos Castaneda, scrittore e antropologo peruviano scomparso da qualche anno, e delle sue esperienze con don Juan, un indios Yaqui del Messico. Si tratta di una delle storie più affascinanti che abbia mai letto circa culture e filosofie completamente diverse dalla nostra, che mettono in risalto quanto i nostri sogni, le nostre ansie, paure, il ns. egocentrismo siano nulla di fronte all’immensità che ci circonda. E’ una lunghissima storia che tenta di dare un significato a ciò che la scienza, la ns. cultura, religione cataloga da sempre come ‘inspiegabile’. Il blues è l’altra mia passione, parlo di quella musica nata nei pressi del delta del Mississipi river per opera di gente di colore, molto povera, che lavorava nelle piantagioni della zona, e che attraverso la musica blues esprimeva le ansie, il disagio, le sofferenze di una vita fatta di stenti, ma anche le proprie gioie fugaci, i sentimenti, i sogni, la speranza che un giorno le loro condizioni di vita potessero essere migliori. Tra gli esponenti di spicco del blues di quella zona d’America e tra i miei bluesman preferiti in assoluto menziono Muddy Waters e John Lee Hooker, due artisti il cui connubio voce-chitarra elettrica è di quelli che fanno venire la pelle d’oca a chi li ascolta.

P.S. Scrivo questo post mentre sono in ferie, quindi senza PC (volutamente) e naturalmente senza connessione a lnternet. Ma già mi mancano i blogs, quindi sto usando le note del mio cellulare per poi sincronizzare!! 🙂

So, damn right i’ve got the blues, from my head down to my shoes (B.G.)

Esecuzione side by side di applicazioni ASP .NET

Con l’uscita della versione 2.0 del Framework .NET molte applicazioni ASP .NET migreranno alla nuova versione, che assicura una compatibilità al 100% all’indietro e una migliore compatibilità verso gli standard Web (vedi XHTML). Questa migrazione avverrà certamente per gradi, e ci troveremo sicuramente in situazioni in cui sullo stesso server saranno installate applicazioni ASP .NET compilate con differenti versioni del Framework. Questo non è affatto un problema grazie alla cosiddetta esecuzione side by side del codice gestito, mediante la quale differenti versioni del Framework .NET possono essere installate sullo stesse ambiente di esecuzione; quindi saranno comuni i casi in cui sulla stessa macchina gireranno applicazioni ASP .NET compilate con differenti versioni del Framework, le quali conviveranno in modo pacifico.

Ma c’è una eccezione a questa regola e riguarda le applicazioni ASP .NET che, come sappiamo, possono essere eseguite all’interno di processi distinti attraverso la creazione di uno o più application pool, configurabili attraverso il pannello di controllo di IIS.

La regola è questa: non è possibile far girare applicazioni ASP .NET compilate con differenti versioni del .NET Framework all’interno di uno stesso processo (worker process), pena un errore a run-time documentato chiaramente nell’application log. In casi del genere occorre creare differenti application pool (almeno 2, uno per il framework 2.0 e l’altro per la versione 1.1) ed associare ad ognuno le applicazioni compilate con la stessa versione.

Un’altra soluzione può essere quella di creare application pool distinti per ogni applicazione ASP .NET funzionante 

Messaggio di errore e/o eccezione in applicatione ASP .NET in configurazione application pool multiplo

Se si ospitano più applicazioni web ASP .NET in application pool distinti su macchine multiprocessore dotati di SO Windows 2003 si potrebbe andare incontro ad un lento degrado delle prestazioni fino ad ottenere:

a) OutOfMemoryException

b) Classico messaggio d’errore “Server Application Unavailable”

Questo comportamento è causato dal funzionamento del meccanismo del garbage collector su sistemi multiprocessore. Su tali sistemi il GC è attivo in modalità Server; questa modalità permette di aumentare le sue prestazioni attraverso la creazione di un heap distinto per ogni processore presente, caratteristica che in presenza di vari worker process porta ad un consumo eccessivo di memoria e da qui ai messaggi di errore menzionati. Questo indesiderato comportamento delle applicazioni ASP .NET è indipendente dalla versione del .NET Framework utilizzata, e si verifica su tutte le versioni di Windows 2003 con IIS 6.0 in modalità nativa con multiple appication pool configurate.

Per ovviare a tale inconveniente occorre forzare l’utilizzo della modalità di funzionamernto “Workstation” del GC, modalità che crea sempre un solo heap e quindi non causa un eccessivo consumo di memoria anche in presenza di application pool distinti.

Per abilitare questa modalità occorre modificare il file aspnet.config, raggiungibile nella directory della specifica versione del Framework che si sta utilizzando nel percorso WIndows\Microsoft.NET\Framework, aggiungendo la seguente riga:

<gcServer enabled=”false”/>

al nodo configuration\runtime.

Questa anomalia è documentata qui