5

C# 4.0 を使用して tt ファイルをレンダリングするには、T4 を指定する必要がありますか? 使ってみた

<#@ template language="C#v4.0" debug="true" #>

しかし、このように動的変数を使用すると

dynamic x=10;
Write(x.ToString());

これらのエラーが発生しています

Error   2   Compiling transformation: Predefined type 'Microsoft.CSharp.RuntimeBinder.CSharpSetMemberBinder' is not defined or imported e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1   1   
Error   3   Compiling transformation: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpInvokeMemberBinder..ctor'  e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1   1   
Error   4   Compiling transformation: Missing compiler required member 'System.Runtime.CompilerServices.CallSite.Create'    e:\projects\DynamicModel\DynamicModel\ModelGenerator.tt 1   1   
Error   5   Compiling transformation: One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll?   e:\Projects\DynamicModel\DynamicModel\ModelGenerator.tt 7   8   
Error   6   A namespace cannot directly contain members such as fields or methods   e:\projects\DynamicModel\DynamicModel\ModelGenerator.cs 1   1   DynamicModel

また、私は TextTemplatingFileGenerator とNot pre-processor テンプレートを使用していることに注意してください

4

2 に答える 2

6

正しいアセンブリも指定する必要があることがわかりました。

これを追加すると、c# 4.0 を使用していることを確認できます。

<#@ template language="C#" debug="true" #>
<#@ output extension=".txt" #>
<#@ Assembly Name="System.Core, Version=4.0.0.0, Culture=neutral" #>
<#@ Assembly Name="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral" #>

しかし、何らかの理由で、t4 変換の時点で、動的ディスパッチがまだ T4 から機能していません。T4 から実行時エラーがスローされ、同じコードが cs ファイルから直接実行されます。

于 2009-10-07T12:43:48.043 に答える
2

デフォルトでは、T4 エンジンは4.0しか使用できないと思いますが、参照する DLL がエラーに対して正しいことを確認します。

于 2009-10-23T23:11:12.063 に答える