Search code examples
c#reflectionembedded-resource

C# Get embedded resources from specific folder or distinguish between embedded resources in different folders


The title sums it up pretty well. I know I can get the embedded resource names using:

        var assembly = System.Reflection.Assembly.GetExecutingAssembly();
        string[] files = assembly.GetManifestResourceNames();

But I'd like to be able to get the embedded resources from only a specific folder. Or at least be able to distinguish between embedded resources from different folders.


Solution

  • The resources are returned in the following format.

    [Namespace].[Folder].[Filename]
    

    Note that all folders in the path are separated by .'s. So if you had an embedded resource with the following configuration

    myproject.csproj (Namespace = com.mycompany.myproject)
    - Resources
      - Images
        - Icons
          - my_icon.ico
    

    The resource name would be...

    com.mycompany.myproject.Resources.Images.Icons.my_icon.ico
    

    If you want to select all from a specific folder, you could use the following LINQ expression or modify it according to your needs.

    string prefix = "your_namespace.your_folder."
    
    var resourceNames = Assembly.GetExecutingAssembly()
        .GetManifestResourceNames()
        .Where(name => name.StartsWith(prefix));