Caricare facilmente le risorse degli assembly con il prefisso pack://

di Cristian Civera, in .NET Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

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