#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
Approfondimenti
-
#143 - Forzare la modalità di rendering software nelle applicazioni WPF
-
La dimensione massima dell'isolated storage in Silverlight 3.0
-
#118 - Esaminare documenti con namespace con LINQ e XDocument
-
#117 - Effettuare stampe con System.Printing
-
Le problematiche più comuni di un'architettura M-V-VM con WPF
-
Disponibile il Silverlight Toolkit March 2009 Release
-
Comunicazione TCP tra Silverlight e WPF
-
#130 - Effettuare una query XPath con LINQ To XML
-
#129 - Ruotare la camera di una scena 3D di WPF con il mouse
-
#170 - Caricare un grafo complesso di oggetti in una sola query con Entity Framework
-
Disponibile Microsoft Expression Studio 3
-
LINQ to Reflection - Parte tre

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.