如何存储嵌入资源的路径?

时间:2013-01-18 21:33:47

标签: c# embedded-resource

是否可以保留项目文件的逻辑布局?

如果我有2个嵌入式资源,如下所示

Embedded Resources

当我调用Assembly.GetManifestResourceNames()时,其中两个命名为:

  • MyLibrary._MyItems.SubItems.SubItem1.xml
  • MyLibrary._MyItems.SubItems.SubItem2.xml

但是,这让我无法真正了解它们在我的项目中如何按逻辑排序。据我所知,他们都可以在同一个目录中。

我担心这可能是不可能的,因为如果我这样命名文件,我的应用程序甚至不会编译:

Embedded Resources

我希望能够区分

  • MyLibrary._MyItems \子项目\ SubItem1.xml
  • MyLibrary._MyItems \ SubItems.SubItem2.xml

Similar question, but less detail than I am looking for

Exact duplicate, no traction

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是提出一个约定来指示文件名的起始位置。然后,您可以“安全地”假设名称的其余部分表示文件夹结构。

但是,由于这些是嵌入式资源,您可以创建在编译之前运行的T4脚本(或一些类似的代码),该脚本检查文件夹结构并构建详细说明该结构的类。

以下是生成的类的外观示例。

public static class MyResources
{
    private readonly Dictionary<String, String> ResourceNameToDirPathMappingSetSource = new Dictionary<String, String>();

    static MyResources()
    {
        ResourceNameToPathMappingSetSource.Add("MyLibrary._MyItems.SubItems.SubItem1.xml", @"MyLibrary._MyItems\SubItems");
        ResourceNameToPathMappingSetSource.Add("MyLibrary._MyItems.SubItems.SubItem2.xml", @"MyLibrary._MyItems");
    }

    public static IReadOnlyDictionary<String, String> ResourceNameToDirPathMappingSet
    {
        get
        {
            return ResourceNameToDirPathMappingSetSource;
        }
    }
}

我的假设是您想要获取资源名称并确定它最初所在的文件夹路径。当然,字典可以包含您需要映射到的任何值(读取:自定义类)。