Embed any File in a .Net Assembly

This is probably old news; I’m posting it here so I can find it again quickly! Here is a simple way to embed any file in a .Net assembly:

Add a file item to an existing project, go to the file’s properties and change the Build Action to ‘Embedded Resource’

Add the following C# code and you’re up and running. I’ve used this technique to embed parameterised default templates into a .Net executable.

///

/// Reads an embedded file from the executing assembly’s resource and returns it as a string.

///

/// Embedded Resource Filename

/// Namespace of the enclosing assembly

/// Embedded resource as string

public string GetEmbeddedResourceFile(string filename, string rootNamespace)

{

string embeddedResource;

Stream strm = null;

Assembly ass = Assembly.GetExecutingAssembly();

if (!rootNamespace.EndsWith(“.”))

rootNamespace = rootNamespace + “.”;

try

{

using (strm = ass.GetManifestResourceStream(rootNamespace + filename))

{

byte[] buffer = new byte[strm.Length – 1];

strm.Read(buffer, 0, buffer.Length);

embeddedResource = System.Text.ASCIIEncoding.ASCII.GetString(buffer);

}

}

catch

{

// Note: It is generally bad practice to consume all exceptions!

// If any error errors, simply return an empty string

embeddedResource = String.Empty;

}

return embeddedResource;

}