2011-06-28 4 views
2

私のクラスのDTO構造を記述するT4テンプレートがあります。私はテンプレートに次のコードを追加することにしました:T4コンパイラは、コードにコメントを挿入します。 '[' '

<# if(prop.TypeUsage.EdmType.Name.ToLower() == "datetime") { #> 
    <#= [DisplayFormat(DataFormatString = "{0:mm/dd/yyyy}")] #> 
<# } #> 

コンパイルするとエラーが発生します。私はT4が内蔵された中間コードを見たとき、私は以下を参照してください。

  #line 55 "C:\Users\Lou\Documents\Visual Studio 2010\Projects\...\DTO_Generator.tt" 
      this.Write(Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture(//[DisplayFormat(DataFormatString = "{0:mm/dd/yyyy}")])); 

はどうやらコンパイラが前に "//" 入れている "[displayFormatに(DataFormatString =" {0:MM/dd/yyyy} ")]"その行の最後にある ')'を削除します。

私はエスケープして、問題を引き起こしていると思われる「[」を二重にしようとしました。

T4がコードに「//」を入れるのを避ける方法はありますか?

ありがとうございました。

答えて

2

私はあなたがしたいことを理解していません。 <#= ... #>コードは...を文字列として評価し、出力します。 [DisplayFormat(DataFormatString = "{0:mm/dd/yyyy}")]を明示的に出力したい場合は、次のようにしてください。

<# if(prop.TypeUsage.EdmType.Name.ToLower() == "datetime") { #> 
[DisplayFormat(DataFormatString = "{0:mm/dd/yyyy}")] 
<# } #> 
+0

はい、そうです。それは動作します。ありがとう – Weej

関連する問題