2011-12-28 173 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文件並告訴它是否有效。