2013-01-18 25 views
6

Có thể giữ lại bố cục lôgic của tệp dự án không?Đường dẫn đến tài nguyên nhúng được lưu trữ như thế nào?

Nếu tôi có 2 nguồn nhúng đặt ra như sau

Embedded Resources

Khi tôi gọi Assembly.GetManifestResourceNames(), hai trong số họ được đặt tên là:

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

Tuy nhiên, điều này cho tôi không có cái nhìn sâu sắc thực sự về cách chúng được sắp xếp hợp lý trong dự án của tôi. Đối với tất cả những gì tôi biết, cả hai đều có thể ở trong cùng một thư mục.

Tôi lo ngại rằng điều này có thể không thực hiện được, vì nếu tôi đặt tên cho các tập tin như vậy, ứng dụng của tôi thậm chí sẽ không biên dịch:

Embedded Resources

Tôi muốn để có thể phân biệt giữa

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

Similar question, but less detail than I am looking for

Exact duplicate, no traction

+1

Ảnh chụp màn hình của bạn chỉ hiển thị nơi các tệp tài nguyên gốc được lưu trữ trên * đĩa *. Mà không có gì để làm nơi họ được lưu trữ bên trong * lắp ráp * sau khi bạn xây dựng chương trình của bạn. Không có cấu trúc thư mục nào bên trong assembly. –

+0

Mặc dù có thể không có bất kỳ điều gì liên quan đến _where_ chúng được lưu trữ trong assembly, nhưng rõ ràng nó có một số tác động lên _how_ chúng được lưu trữ. Bạn có một tham chiếu cho khẳng định của bạn rằng tôi có thể đọc thêm về? – Michael

+0

'MyLibrary' đầu tiên là không gian tên mặc định của dự án, phần còn lại là các thư mục thông thường. Miễn là bạn biết không gian tên mặc định hoặc có thể tìm thấy nó, bạn sẽ có thể cho cấu trúc thư mục ... trừ khi ai đó quyết định xây dựng assembly của họ với một quá trình xây dựng tùy chỉnh chứ không phải VS –

Trả lời

0

Một giải pháp đơn giản có thể đưa ra một quy ước để chỉ ra nơi một tên tập tin khởi động. Sau đó bạn có thể "an toàn" giả định phần còn lại của tên cho biết cấu trúc thư mục. Tuy nhiên, vì đây là những tài nguyên được nhúng nên bạn có thể tạo một tập lệnh T4 (hoặc một đoạn mã tương tự) chạy trước khi biên dịch kiểm tra cấu trúc thư mục và xây dựng một lớp chi tiết cấu trúc đó. Quay lại đầu trang

Dưới đây là ví dụ về lớp học được tạo ra trông như thế nào.

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; 
     } 
    } 
} 

Giả định của bạn là bạn muốn lấy tên tài nguyên và xác định đường dẫn thư mục ban đầu. Từ điển có thể chứa bất kỳ giá trị nào (đọc: lớp tùy chỉnh) bạn cần ánh xạ tới.

Các vấn đề liên quan