views:

330

answers:

3

Hi,

Is it possible to embed a custom binary file inside a C# class library and then at runtime read it with a binary reader?

I'm guessing it might be possible through resources.

Many thanks

+1  A: 

Yes it is easy:

Add the file to your project and set the "Build action" to "Embedded resource".

In your program do

foreach (string name in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
  if (name.EndsWith("<name>", StringComparison.InvariantCultureIgnoreCase))
  {
    using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
    {
      // ...
    }
    break;
  }
}

Finding the right resource is a little bit complicating because there is stuff in front of the file name (namespaces etc. set a breakpoint to the if(...) to see the real resource name).

rstevens
many thanks, I'll give it a whirl!!
Andy
This works great. Especially as I am constantly changing the file contents and it just re-embeds when I build the project.
Andy
+2  A: 

You can do this by adding the file to the Resources through the project properties. Visual studio will then give you a handy class to access your file using the following code

byte[] theFile = myNamespace.Properties.Resources.theBinaryFile;

Where the resource name is theBinaryFile.

John Hunter
RE: my comment on the answer below. If the original file changes will it be re-embedded automatically when I next build the project?
Andy
yes if you change the file the next build will update the resource file.
John Hunter
thanks for your help John.
Andy
A: 

I have a similar problem.

I need to include xml file in Class Library project and use that xml file from any of the class of Class Library project. The xml file is going to modify, so the modifications should be reflected if the modified file reloaded by any of the class.

Thanks, Shahaji.