Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
In Visual Studio, you can think of resources in a couple of categories. You can have binary files, like a JPEG, or you can have localized items stored in Resx files. In this movie, I'll look at binary resources. I am inside a solution called ResourcesDemo. I'm going to look at the code inside ResourcesDemo project. Here is the problem that we're trying to solve. I have these two files, which I would like to embed inside my executable. By embedding them inside my executable, they cannot be separated from this exe.
My users cannot delete them. The downside to this approach is that I increase the size of my executable file. They're easy to embed; all I need to do is set this Build Action to Embedded Resource for both of these files. Let me show you the contents of these files. Double-click on Curls.png. It's a 615 x 386 pixel picture. Then SherlockHolmesQuotes file is just a simple text file. When I compile my application, and go look at my output folder, I'll do that by clicking on Show All Files, and then opening this bin folder.
There is my ResourcesDemo.exe file. As you can see in the bin folder, I do not have copies of Curls.png or SherlockHolmes. They are embedded inside this file. Now to retrieve them in my code, I have to know the secret string path to the items. Let me show you how to do this. I'll switch over to my code behind by double-clicking on Program.cs, and then we'll scroll down here and look at this first line of code. The key right here, or the secret, is right here: the name of my project, the name of the subfolder--in this case AddResources--and then the name of the binary file SherlockHolmes.txt.
The rest of the code is just getting the ExecutingAssembly, retrieving the stream using GetManifestResourceStream, and then creating a special StreamReader, and then reading the contents. Let me show you what this looks like. I have debugger code set up on line 18. So I'll press F5 to run the application. Then I'll press F11 to step through my code. We come down here, and we get the stream, the reader.
If I hover over this variable, now you can see the contents of that text file. Now, I can also do this with my image file by stepping into this section of code. Here I'm getting Curls.png. In order to get this as an image, I need to use a method on the Image class called FromStream. That'll take the binary stream and turn it back into an image, like this. Now let me hover over this variable and show you that it has a 386 height, 615 wide picture.
I can't show you the picture, because I'm in a console application. I've also got some other code down here you can investigate if you want. This is going and getting all of the resources in an array, and then I'm foreaching over that. Let me press F5 to show you the names of the strings of my embedded resources. Now to simplify your life, you can use Visual Studio to embed your resources instead. It will automatically generate a helper class to give you access to those items. Let me show you how that's done. I'm going to scroll down here to this VsResources project, right-click, and choose Set as StartUp Project.
Then I'm going to go into this Properties section. I'll double-click on Properties. I'll scroll down to the Resources section. You can see there is a hyperlink in here that says, "This project does not contain a default resources file. Click here to create one." I'll click as suggested. Now you'll see two things happened. I have a new editor show up, plus there is a new Resources.resx file created for me. I'm going to come over here and try to type in the name of our new resource.
This will be a string resource. Our slogan is "One for all." I can also add other types of resources like images and other items. I'm going to choose to add an existing item. So I'll go here and say Add Existing File. Next, I'm going to go to my Desktop, my Exercise Files folder, scroll down to the Assets section.
I'm going to load this BlueArrow.png file. Now, you can see the BlueArrow is added. This is the identifier I'm going to use to retrieve it in my code, BlueArrow. You will also notice that it added a Resources folder. It made a copy of that file over here. Also, if you scroll down and look inside this Resources.Designer.cs, you'll see that it wrote some assessor codes, so it makes it easy to find this resource. Let me show you that. I'll double-click here, and we're going to scroll down, and find this section.
Here is the way to retrieve my BlueArrow. It's going to return me a bitmap. This is going to return me a string. Here is how you use it in your code. We go to Program.cs. I'm going to uncomment this code by doing a Ctrl+K, Ctrl+U. There is a very simple way to access those items now. I can do VsResources, which is the name of my namespace, .Properties.Resources.
Notice what happen when I hit the period. I now have access to those resources. There is BlueArrow, and there is slogan. I'm going to choose BlueArrow. And I'll take this and copy it--or cut it I should say--and paste in here. This one is retrieving my slogan and storing it as a string. Now if you want, you can use the harder way of doing that by going to the ResourcesManager, getting a copy of that, and then using the string identifier to find the item.
But I think this is the preferred syntax. So let me comment these lines of code out Ctrl+K, Ctrl+C. Let's see if the code works. I'm going to go up here to copy this and paste it into my main method. Then I'll put a breakpoint on line 24 and press F5. Press F11 to step a few lines into my code. Yes, there is my slogan, and there is my image.
It's relatively easy to add these kinds of resources to Visual Studio using these tools. There is another type of resources that's very interesting. That's called the localized resource, and that's the topic for the next movie in this chapter.
Get unlimited access to all courses for just $25/month.Become a member
61 Video lessons · 99282 Viewers
56 Video lessons · 112546 Viewers
71 Video lessons · 81360 Viewers
131 Video lessons · 39060 Viewers
Access exercise files from a button right under the course name.
Search within course videos and transcripts, and jump right to the results.
Remove icons showing you already watched videos if you want to start over.
Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.
Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.