2011-12-28 87 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

这不是您的问题的确切答案,但它会提供有关该问题的更多信息。我的经历完全一样。关于这个问题有一些奇怪的事情:

  • 它以前工作过。我在两个月前运行相同的代码(它来自源代码控制,所以我确信),今天它失败了。
  • 从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 

(您可以在“C:\ Program Files文件(x86)\ Common Files \ microsoft shared \ TextTemplating \ 10.0”中找到TextTransform.exe)。

另外我禁用了hostspecific标志。

从TextTransform.exe而不是VS中执行完全相同的模板。这似乎是VS的一些问题。 请尝试使用TextTransform。 exe文件并告诉它是否有效。