Code or command to use embedded resource in Visual Studio

11,354

Open Solution Explorer add files you want to embed. Right click on the files then click on Properties. In Properties window and change Build Action to Embedded Resource.

Embedding Resource Visual Studio

After that you should write the embedded resources to file in order to be able to run it.

using System;
using System.Reflection;
using System.IO;
using System.Diagnostics;

namespace YourProject
{
    public class MyClass
    {
        // Other Code...

        private void StartProcessWithFile()
        {
            var assembly = Assembly.GetExecutingAssembly();
            //Getting names of all embedded resources
            var allResourceNames = assembly.GetManifestResourceNames();
            //Selecting first one. 
            var resourceName = allResourceNames[0];
            var pathToFile = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory) +
                              resourceName;

            using (var stream = assembly.GetManifestResourceStream(resourceName))
            using (var fileStream = File.Create(pathToFile))
            {
                stream.Seek(0, SeekOrigin.Begin);
                stream.CopyTo(fileStream);
            }

            var process = new Process();
            process.StartInfo.FileName = pathToFile;
            process.Start();
        }
    }
}
Share:
11,354
3rutu5
Author by

3rutu5

Updated on June 20, 2022

Comments

  • 3rutu5
    3rutu5 almost 2 years

    Can somebody provide me a starting point or code to access an embedded resource using C#?

    I have successfully embedded a couple of batch files, scripts and CAD drawings which I would like to run the batch and copy the scripts and CAD files to a location specified in the batch file.

    I'm struggling to find how to specify what the item is and set the path within the EXE. The below code is what I thought would work, but it failed and the others I found online all related to XML files.

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "\\Batchfile.bat";
    p.Start();
    

    I honestly don't even know if I'm looking at the correct way to do this as this is my first time using either C# or Visual Studio.

  • krillgar
    krillgar over 7 years
    I would break up that code sample some so it doesn't appear that your assembly declaration (etc) are all a part of the using statements at the top of the file. Make it look like real code that anyone can easily read.
  • 3rutu5
    3rutu5 over 7 years
    Thanks, I don't really understand the code and how it allows me to select the particular file, but it gives me a start of what to do.
  • Orkhan Alikhanov
    Orkhan Alikhanov over 7 years
    Play with this line. var resourceName = allResourceNames[0];. allResourceNames is an array of string containing your embedded resource names.