5

<#+#>括弧で宣言された非静的メソッドからHostオブジェクトにアクセスしようとすると、すべて正常に機能します。しかし、次のように、クラスメソッドからアクセスする必要があります。

<#+
public class ProjectTraverser
{
    public void Traverse()
    {
        var a = Host;
    }
}
#>

このテンプレートを実行すると、次のエラーが発生します。「変換のコンパイル:ネストされたタイプ'Microsoft.VisualStudio.TextTemplating7D03DF372FEAC3D3A28C011A41F02403.Gene Projects \ Test Solutions \ GettingStarted \ TelerikMvc3RazorApplication \ TextTemplate2.tt "

アイデアを共有してください。

4

1 に答える 1

5

FuleSnabelがコメントしたように、作成している宣言はネストされた型に対するものであり、テンプレートを表す囲んでいる型のインスタンス変数にアクセスできません。

ITextTemplatingEngineHostタイプのHostプロパティをProjectTraverserクラス(おそらく静的)に追加してから、メインテンプレートから設定します。

振り返ってみると、メインのHostプロパティを静的にしたかったのですが、同じAppDomain内の同じテンプレートの異なるインスタンスに対して複数のホストを想像するのはあまり意味がありませんが、あなたは生きて学びます。

大まかな例を次に示します。

<#@ template hostspecific="true' #>
<#
    ProjectTraverser.Host = Host;
#>
<#+ 
public class ProjectTraverser 
{
    public static ITextTemplatingEngineHost Host { get; set; }

    public void Traverse() 
    { 
        var a = Host; 
    } 
} 
#> 
于 2012-05-17T00:28:01.107 に答える