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>
<#
    }
}
#>

これについて実際に機能する情報を見つけることができず、これまでのところ試行錯誤の非常に遅いケースです。属性を取得する正しい方法、またはマップされていない属性を無視するテンプレートを取得する正しい方法は何ですか?

4

1 に答える 1

1

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

  • 以前は機能していました。2 か月前と同じコードを実行します (ソース管理からのものなので、確かです)。今日は失敗しています。
  • T4 エンジン (MVC アプリケーションなど) の外部から同じコードを実行すると、まったく問題なく動作します。

コードを変更して、Visual Studio の外部から実行できるようにしました。

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

に変更されました:

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

次に、RMB > Run Custom Tool の代わりに TextTransform.exe を使用しました。

使用する

TextTransform.exe AjaxServices.tt -out AjaxServices.js

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

また、ホスト固有のフラグを無効にしました。

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

于 2012-01-05T00:54:46.863 に答える