问题是:有没有办法在* .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吗?
谢谢!
答案 0 :(得分:0)
您可以使用带外卡的项目组。这将使Visual Studio自动包含相对于与通配符模式匹配的项目的磁盘上的任何文件。
只有当它们存在于磁盘上时才会起作用(即文件仅在加载项目时显示)。
此模式将包含具有 g.sql 后缀
的所有文件 <ItemGroup>
<Build Include="*\*.g.sql" />
</ItemGroup>
不幸的是,Visual Studio喜欢在保存项目时扩展这些通配符,从而有效地删除它。解决此问题的最佳方法是间接。
创建一个新的MSBuild项目文件,其中只包含项目组,然后在SSDT项目中导入带有<Import>
元素的新项目文件。包含文件中的内容将合并到您的主SSDT项目中。