6

プロジェクトファイルの論理レイアウトを保持することは可能ですか?

次のように2つの埋め込みリソースをレイアウトした場合

埋め込まれたリソース

Assembly.GetManifestResourceNames()を呼び出すと、2つに名前が付けられます。

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

ただし、これでは、プロジェクトでそれらが論理的にどのように順序付けられているかについての実際の洞察は得られません。私が知っている限りでは、それらは両方とも同じディレクトリにある可能性があります。

このようにファイルに名前を付けると、アプリがコンパイルされないため、これが不可能になる可能性があるのではないかと心配しています。

埋め込まれたリソース

区別できるようにしたい

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

同様の質問ですが、私が探しているよりも詳細ではありません

正確な複製、牽引力なし

4

1 に答える 1

0

簡単な解決策の 1 つは、ファイル名の開始位置を示す規則を考え出すことです。その後、名前の残りの部分がフォルダー構造を示していると「安全に」想定できます。

ただし、これらは埋め込みリソースであるため、フォルダー構造を調べてその構造を詳述するクラスを構築するコンパイルの前に実行される 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;
        }
    }
}

私の仮定は、リソース名を取得して、元のフォルダー パスを特定することです。もちろん、ディクショナリには、マップする必要がある任意の値 (読み取り: カスタム クラス) を含めることができます。

于 2013-01-24T20:49:04.347 に答える