-
Notifications
You must be signed in to change notification settings - Fork 776
Using Resources
There are several possible ways to embed resources in your .dll/.exe file:
- Create a new resource file to your project (Project > Add > New Item > Misc > Empty resource file).
- Right click on the empty list in the resource editor > Add Files, choose the file
- How the files gets added depends on the file type, images are added as System.Drawing.Bitmap, binary files as byte array.
Assume we added two files, "Test.dat" and "Image.png". To access the files, use this code:
using System.Reflection;
using System.Resources;
ResourceManager resources = new ResourceManager("Namespace.ResourceFile", Assembly.GetExecutingAssembly());
byte[] fileData = (byte[])ResourceManager.GetObject("Test.dat");
Bitmap bitmap = (Bitmap)ResourceManager.GetObject("Image");
Namespace is the root namespace of your application, ResourceFile the name of the .resx file (without the .resx extension). If the .resx file is inside a subfolder in the project, use "Namespace.SubfolderName.ResourceFile".
You can tell SharpDevelop to automatically generate a class that makes accessing resources stored in .resx files easier by selecting the .resx file in the project browser, then opening the properties window and setting "Custom Tool" to "ResXFileCodeGenerator". Then right click the .resx file in the project browser and choose "Execute custom tool". This will generate a ".Designer.cs" file for the resource file that contains a class for easy access to the resources. The class will automatically be regenerated whenever you change the .resx file inside SharpDevelop. You can access the resources using "ResourceFile.Test_dat" / "ResourceFile.Image".
- Use Project > Add > Existing Item to add a file to the project.
- Select the file in the project browser, open the properties window and set "Build action" to "EmbeddedResource".
To access the resource:
using System.IO;
using System.Reflection;
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Namespace.SubfolderName.ResourceFile")) {
// read from stream to read the resource file
}
- Use Project > Add > Existing Item to add a file to the project.
- Select the file in the project browser, open the properties window and set "Build action" to "Resource".
You can access the resource in Xaml by using the file name, e.g. <Image Source="Image.png"/>
.