#103 - Caricare facilmente le risorse degli assembly con il prefisso pack://
di Cristian Civera, in .NET Framework, 27 febbraio 2009
Archiviato in: .NET Framework, .NET Framework 3.0, .NET Framework 3.5, Visual Studio, Windows Presentation Foundation, XAML
Le risorse sono file di qualsiasi genere che vengono inclusi negli assembly così da poter essere distribuiti insieme al codice che ne necessita l'uso. Ne esistono di due tipi a seconda di come vengono marcati in Visual Studio con le build action: embedded resource e resource. Nel primo caso il file binario viene incluso in base al suo nome e cartella relativa all'interno dell'assembly; per recuperarlo si usa il metodo Assembly. GetManifestResourceStream. Nel secondo caso, viene invece creato un file xml che include una serie di voci, ognuna per ogni risorsa, contenente in Base64 i bytes della risorsa stessa e per recuperarlo si usa l'oggetto ResourceManager.
Con Windows Presentation Foundation/XPS, visto il suo largo uso di risorse all'interno dell'applicazione, è stato introdotto un nuovo schema pack:// per recuperare un file dalle risorse dell'assembly corrente o referenziato. Il sistema sfrutta un factory pattern, presente dalla versione 1.0, che permette di specificare per ogni schema un IWebRequestCreate. Normalmente sono già registrati gli schema file:// ftp:// e http:// ma è possibile registrare ad inizio applicazione il nuovo PackWebRequestFactory, dell'assembly PresentationCore, per poter caricare facilmente le risorse:
// Registro il prefisso pack così tutti i WebRequest lo sanno usare WebRequest.RegisterPrefix("pack", new PackWebRequestFactory());
Da ora in poi la chiamata a WebRequest.Create conoscerà anche lo schema pack:// e restituirà i byte della risorsa chiesta. Tale metodo è sfruttato da quelle classi che accettano un Uri, come WebClient, DataService, XmlDocument, XDocument, XmlReader ecc.
E' possibile per esempio leggere un file Front.xml presente nell'assembly corrente, nella cartella Resources:
using (XmlReader reader = XmlReader.Create("pack://application:,,,/Resources/Front.xml")) { //... }
E' possibile inoltre specificare in quale assembly cercare la risorsa:
pack://application:,,,/mioAssembly;v1.0.0.0;component/Resources/Front.xml
Per una lista completa si veda il seguente indirizzo:
http://msdn.microsoft.com/en-us/library/aa970069.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
-
#82 - Usare l'engine di data binding all'interno di un template in Silverlight
-
#159 - Gestire code di operazioni con un Dispatcher personalizzato
-
Real Code Conference 4: Visual Studio 2010 per l'architetto
-
#156 - Recuperare le proprietà di una classe tramite i metadati con Entity Framework
-
Realizzare applicazioni web on the cloud con Microsoft Windows Azure
-
Le novità di Windows 7 per gli sviluppatori
-
#168 - Recuperare tutte le istanze di un tipo specifico con Entity Framework ed Entity SQL
-
#176 - Ottimizzare l'aggiornamento di una entity sul database con Entity Framework
-
#171 - Creare un task personalizzato per msbuild
-
#166 - Recuperare le funzioni definite nel conceptual schema dell'EDM in Entity Framework
-
#1008 - Recuperare i dati da ListView di ASP.NET senza usare FindControl
-
#148 - Scoprire le pagine attualmente più richieste su IIS con LINQ e Microsoft.Web.Administration

Commenti
mi piace
non mi piace
Facebook
Twitter










