2016-03-31 21 views
2

質問は、生成されたファイルが指定されたビルドアクションに設定されるように、* .ttファイルに設定する方法がありますか?T4から生成されたファイルのビルドアクションを設定するにはどうすればよいですか?

私は、テンプレートを使用してSQLスクリプトを生成しています。私はこのスクリプトをDatabaseプロジェクトのpre-deployスクリプトとして使います。現在、ファイルを再生成するたびに、ビルドアクションをプリデプロイするよう手動で設定する必要があります。自動化したいと思います。

テンプレートと生成するSQLの両方のファイルがプロジェクトに含まれています。プロジェクト内の(* .sqlproj)は、そのまま次のタグ:

<PreDeploy Include="Migration\PreDeployScript.sql"> 
    <DependentUpon>Migration\PreDeployScript.tt</DependentUpon> 
</PreDeploy> 

<None Include="Migration\PreDeployScript.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
</None> 

私はカスタムツールは、SQLを再生成するために実行

はその後、事前デプロイを(私はかなり頻繁にそれを行う必要があります)タグが削除され、ビルドタグがその場所に置かれます。このように:

<Build Include="Migration\PreDeployScript.sql"> 
    <DependentUpon>Migration\PreDeployScript.tt</DependentUpon> 
</Build> 

プロジェクトが壊れてしまい、ビルドからプレデプロイに手動で戻す必要があります。

ビルドアクションを保持するためにテンプレートファイルに何かを指定することができます。

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

+0

関連するhttp://stackoverflow.com/questions/30038839/generated-by-t4-file-build-action-gets-reset-to-build – debater

答えて

0

ワイルドカードを持つアイテムグループを使用できます。これにより、Visual Studioは、ワイルドカードパターンに一致するプロジェクトに関連するディスク上のファイルを自動的にインクルードします。

これは、既にディスク上に存在する場合にのみ動作します(つまり、プロジェクトをロードするとファイルが表示されます)。

このパターンは

<ItemGroup> 
    <Build Include="*\*.g.sql" /> 
</ItemGroup> 

残念ながら、Visual Studioは、あなたがそれを効果的に除去し、プロジェクトを、保存するときに、これらのワイルドカードを展開するのが好きg.sqlサフィックスを持つすべてのファイルが含まれます。この問題を解決する最善の方法は間接参照です。

アイテムグループだけを含む新しいMSBuildプロジェクトファイルを作成し、<Import>要素を含む新しいプロジェクトファイルをSSDTプロジェクトにインポートします。インクルードされたファイルの内容は、プライマリSSDTプロジェクトにマージされます。

+0

あなたの答えをありがとうが、それは役に立たなかった。私は質問を更新しました。 PreDeployタグを別のプロジェクトファイルに移動し、ワイルドカードを使用して変更したとき。しかし、TTファイルでSQLを再生成した後も、私が問題としたこの間違ったBuildタグが追加されています。 – krus

関連する問題