T4模板获取属性

3

我正在尝试定制MVCScaffolding中使用的T4模板。
我想过滤掉带有NotMapped属性的属性。

我的问题是属性集合似乎是空的。我已经尝试像下面这样打印属性:

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个回答

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标志。

当使用TextTransform.exe而不是VS执行相同的模板时,它可以完美地工作。看起来这是一个与VS有关的问题。 请尝试使用TextTransform.exe并告诉我是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接