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;
}