2011-12-28 20 views
3

MVCScaffoldingで使用されるT4テンプレートをカスタマイズしようとしています。 NotMapped属性を持つプロパティを除外したいと思います。T4テンプレート属性を取得

私の問題は、属性のコレクションが空であるようです。私は以下のような属性をプリントアウトしようとしている:

List<ModelProperty> properties = GetModelProperties(Model.ViewDataType, true); 
foreach (ModelProperty property in properties) { 
    if (!property.IsPrimaryKey && !property.IsForeignKey) { 
#> 
     <th> 
      @Html.LabelFor(x => x.First().<#= property.Name #>) 
      <!-- 
      <#foreach(var attribute in property.Type.CodeType.Attributes) 
      {#> 
       Attribute: <#=attribute.GetType().Name#> 
      <#}#> 
      --> 
     </th> 
<# 
    } 
} 
#> 

私は実際にこれまでのところ、それは試行錯誤の非常に遅い場合で動作し、これに関する情報を見つけることができません。属性を取得するか、マップされていない属性を無視するようにテンプレートを取得する正しい方法は何ですか?

答えて

1

これはあなたの質問に対する正確な答えではありませんが、問題に関する詳細情報を提供します。私はまったく同じことを経験しました。この問題に関するいくつかの奇妙なことがあります:

  • これは以前働いていました。私は2ヶ月前と同じコードを実行します(それはソースコントロールからです)ので、今日は失敗しています。
  • T4エンジン(MVCアプリケーションなど)の外部から実行した場合、同じコードが正常に動作します。

それは、Visual Studioの外部から実行できるように、私は自分のコードを変更した:

string assemblyPath = Host.ResolveAssemblyReference("$(ProjectDir)$(OutDir)T4Mvc.dll"); 

がに変更されました:

string assemblyPath = @"D:\AbsolutePath\bin\T4Mvc.dll"; 

それから私は> TextTransform.exeの代わりに人民元を使用カスタムツールの実行

使用

TextTransform.exe AjaxServices.tt -out AjaxServices.js 

(TextTransform.exeは「C:¥Program Files(x86)¥Common Files¥microsoft shared¥TextTemplating¥10.0」にあります)。

また、私はhostspecificフラグを無効にしました。

VSの代わりにTextTransform.exeから実行すると、同じテンプレートが完全に機能しました。それはVSと何らかの問題があるようです。 TextTransformを使用してみてください。 exeとそれが動作するかどうかを伝えます。

関連する問題