質問

私は自分のDALのコードを生成する亜音速の3(ActiveRecordのモード)を使用しています。それはあなたが救うとすぐに、あなたのためのコードを生成することT4テンプレート(.tt)ファイルを使用します。

私は私のNANTビルドの一部としてこれを自動化したいが、私は仕事にこれを取得することはできません。私は、MSはT4テンプレートからコードを生成するためにTextTransformと呼ばれるツールを提供することを知っているが、亜音速テンプレートの場合には、これは動作するようには思えない - 私は、テンプレートは、Visual Studio内からテンプレートされ、実行に関するいくつかの仮定を考えて、これは、コマンドラインから動作するようには思えません。私はActiveRecord.ttに対してそれを実行しようとすると、私が手にエラーがあります:

サブソニック\ ActiveRecord.tt(0,0):エラー:実行中の変換:System.InvalidCastExceptionの:型 'Microsoft.VisualStudio.TextTemplating.CommandLine.CommandLineHost' のキャストオブジェクトへのできない 'System.IServiceProvider' と入力します。    Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089bで。 GeneratedTextTransformation.GetCurrentProject()はC:\ Users \ユーザーmatt.roberts \のAppData \のLoc アル\一時\亜音速\ Settings.ttinclude:行103    Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089bで。 C言語でGeneratedTextTransformation.GetConnectionString(文字列のconnectionStringName):\ U SERS \ matt.roberts \のAppData \ローカル\ Tempに\亜音速\ Settings.ttinclude:51行    Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089bで。 C言語でGeneratedTextTransformation.get_ConnectionString():\ Users \ユーザーmatt.roberts \のAppData \ ローカル\一時\亜音速\ Settings.ttinclude:行87

は、誰もがこの世代を自動化するために管理していますか?

おかげ

マットます。

役に立ちましたか?

解決

私はややこの地面をカバーブログのエントリを書いてます:

からT4テンプレートを実行するためのオプションを。 NETコードする

あなたがやろうとしている何をすべきか亜音速T4テンプレートにいくつかの手術が必要になります。具体的には、(最小限)Visual Studioが実行されている必要はありません何かをEnvDTE.DTEへのすべての参照を交換する必要があります。あなただけの「それは働いてもらう」したい場合はそれはあなたのT4テンプレートにいくつかのパスおよび/またはコンフィギュレーション情報をハードコーディングなどの単純なようなものであってもよい。

これは、T4テンプレートは、.NETコードの周りにやや薄いラッパーであることを覚えておくことが重要です。あなたは、.NETからそれを行うことができる場合、あなたは非常に可能性がT4からそれを行うことができ、あなただけのT4が提供する制約の異なるセット内の仕事にどのように理解する必要があります。 (TextTransform.exe対のVisual Studioのような)異なるT4「ホスト」とは、異なる方法で動作し、ちょうどT4テンプレートは、一つのホストの下に罰金を実行するためすることは、他のホストの下に罰金を実行するという意味ではありませません。

他のヒント

setting.ttincludeは、コマンドラインから実行したい場合は、設定を与える必要があります、Visual Studioのプロジェクト内で実行する必要があり、むしろ設定ファイルでそれを指しているよりも、接続文字列をファイルに、あなたも持っていることプロジェクトのパスを設定します。

あなたはそれがこれを呼び出すseee

string GetConnectionString(string connectionStringName){
    var _CurrentProject = GetCurrentProject();

    string result="";
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
    configFile.ExeConfigFilename = GetConfigPath();

あなたが手でこれらを設定した場合、問題はそう、茎、おそらくthatsのは、あなたoproblemが、その後に解決することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top