Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Load template from embedded resource

How can I load an embedded resource as an ITemplate? The LoadTemplate() method only takes a string virtual path, and obviously this will not work for embedded resources.

like image 665
MadSkunk Avatar asked Oct 15 '10 22:10

MadSkunk


1 Answers

Assuming that your templates are embedded and need to stay that way (which I think you may want to reconsider), here is a function I wrote a while back that I've used successfully many times when dealing with embedded files (mostly .sql files). It converts an embedded resource to a string. You may then need to write your template out to disk.

public static string GetEmbeddedResourceText(string resourceName, Assembly resourceAssembly)
{
   using (Stream stream = resourceAssembly.GetManifestResourceStream(resourceName))
   {
      int streamLength = (int)stream.Length;
      byte[] data = new byte[streamLength];
      stream.Read(data, 0, streamLength);

      // lets remove the UTF8 file header if there is one:
      if ((data[0] == 0xEF) && (data[1] == 0xBB) && (data[2] == 0xBF))
      {
         byte[] scrubbedData = new byte[data.Length - 3];
         Array.Copy(data, 3, scrubbedData, 0, scrubbedData.Length);
         data = scrubbedData;
      }

      return System.Text.Encoding.UTF8.GetString(data);
   }
}

Example usage:

var text = GetEmbeddedResourceText("Namespace.ResourceFileName.txt",
                                   Assembly.GetExecutingAssembly());
like image 193
Russell McClure Avatar answered Oct 27 '22 16:10

Russell McClure