如何从T4为生成的文件设置构建操作?

时间:2016-03-31 12:03:34

标签: sql-server visual-studio t4 sql-server-data-tools

问题是:有没有办法在* .tt文件中设置一个设置,以便将生成的文件设置为指定的Build Action?

问题是我正在使用模板生成SQL脚本。我在数据库项目中使用此脚本作为预部署脚本。目前,每次重新生成文件时,我都必须手动将Build Action设置为Pre-Deploy - 我想将其自动化。

两个文件 - 它生成的模板和SQL - 都包含在项目中。在Project(* .sqlproj)中,它们是下一个标记:

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

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

当我运行自定义工具来重新生成SQL时(我需要经常这样做),然后删除PreDeploy标记并将Build标记放在其位置上。像这样:

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

它打破了项目,我需要手动更改Build to PreDeploy。

可以在模板文件中指定一些内容以始终保留构建操作PreDeploy吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用带外卡的项目组。这将使Visual Studio自动包含相对于与通配符模式匹配的项目的磁盘上的任何文件。

只有当它们存在于磁盘上时才会起作用(即文件仅在加载项目时显示)。

此模式将包含具有 g.sql 后缀

的所有文件
 <ItemGroup>
    <Build Include="*\*.g.sql" />
 </ItemGroup>

不幸的是,Visual Studio喜欢在保存项目时扩展这些通配符,从而有效地删除它。解决此问题的最佳方法是间接。

创建一个新的MSBuild项目文件,其中只包含项目组,然后在SSDT项目中导入带有<Import>元素的新项目文件。包含文件中的内容将合并到您的主SSDT项目中。