C#从特定文件夹获取嵌入资源或区分不同文件夹中的嵌入资源

时间:2013-04-11 18:17:44

标签: c# reflection embedded-resource

标题总结得很好。我知道我可以使用以下方法获取嵌入式资源名称:

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

但我希望能够从特定文件夹中获取嵌入式资源。或者至少能够区分不同文件夹中的嵌入资源。

2 个答案:

答案 0 :(得分:11)

资源以下列格式返回。

[Namespace].[Folder].[Filename]

请注意,路径中的所有文件夹都以.分隔。因此,如果您有一个具有以下配置的嵌入式资源

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

资源名称为......

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

如果要从特定文件夹中选择所有文件夹,可以使用以下LINQ表达式或根据需要进行修改。

string prefix = "your_namespace.your_folder."

var resourceNames = Assembly.GetExecutingAssembly()
    .GetManifestResourceNames()
    .Where(name => name.StartsWith(prefix));

答案 1 :(得分:3)

如果您创建一个名为Images的文件夹,并将文件放在那里,那么该资源的名称将变为Assembly.Images.fileName。

所以你可以尝试类似的东西:

var assembly = System.Reflection.Assembly.GetExecutingAssembly();

var names = assembly.GetManifestResourceNames().Where (n => n.Contains(".Images."));