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
I più letti di oggi
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- Chiamare direttamente un numero di telefono con HTML5
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView