2

別の TDS プロジェクトへの基本テンプレート参照を使用して、このリンク/記事に記載されているようにマルチプロジェクト プロパティを設定しようとしています。 http://hedgehogdevelopment.github.io/tds/chapter4.html#multi-project-properties

上記のリンクと同様に、プロジェクト X でコードを生成する TDS プロジェクト TDS A と、プロジェクト Y でコードを生成する TDS プロジェクト B (基本テンプレート) があります。プロジェクト X は Y を参照し、TDS プロジェクト A はマルチプロジェクト プロパティ設定でプロジェクト B を参照します。 .

記事に書かれていることをやっているようです。しかし、TDS プロジェクト A から生成されたコードは、TDS プロジェクト B によって生成されたコードへの参照を生成することはできません。何が起こっているかの例を挙げると、正しい動作は、プロジェクト X で生成されたクラスが、クラス D が基本クラスから継承する必要があると言うことです。プロジェクト Y の Class Base と言うと、代わりに、存在しない Class Base の完全修飾名前空間の独自のバージョンが作成されます。ProjectY.tree.structure.BaseClass である必要がある場合、独自のアセンブリ名前空間 ProjectX.tree.structure.BaseClass を使用します。

誰かがこれを機能させましたか。何か不足していますか?

T4 テンプレートを微調整することで機能するようになりましたが、それは最善の解決策ではありません

ありがとう

4

2 に答える 2

3

チームの誰かがこれを手伝ってくれました。これは最善の解決策ではありませんが、上記で定義した設定があればうまくいくはずです。コツは、Helpers.tt テンプレートで以下のメソッドを変更することです。コメントでマークされた行を追加します。ベース プロジェクトの名前空間をハードコーディングしないように、これをさらに拡張できるはずです。私がそれを理解しようとしたら投稿します。

public static string GetNamespace(string defaultNamespace, SitecoreItem item, bool includeGlobal = false)
{
    List<string> namespaceSegments = new List<string>();
    // add the following line
    namespaceSegments.Add(!item.ReferencedItem ? defaultNamespace : "[BaseProjectNameSpace]");
    namespaceSegments.Add(item.Namespace);
    string @namespace = AsNamespace(namespaceSegments); // use an extension method in the supporting assembly

    return (includeGlobal ? string.Concat("global::", @namespace) : @namespace).Replace(".sitecore.templates", "").Replace("_", "");
}
于 2015-07-31T16:48:28.027 に答える