【问题标题】:How to set Build Action for generated files from a T4?如何为从 T4 生成的文件设置构建操作?
【发布时间】:2016-03-31 12:03:34
【问题描述】:

问题是:有没有办法在 *.tt 文件中进行设置,以便将生成的文件设置为指定的构建操作?

问题是我正在使用模板生成 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 改回 PreDeploy。

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

谢谢!

【问题讨论】:

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


【解决方案1】:

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

这只有在磁盘上已经存在的情况下才有效(即文件只会在您加载项目时显示)。

此模式将包含任何带有 g.sql 后缀的文件

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

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

创建一个仅包含项目组的新 MSBuild 项目文件,然后在您的 SSDT 项目中导入具有 &lt;Import&gt; 元素的新项目文件。包含文件中的内容将合并到您的主 SSDT 项目中。

【讨论】:

  • 感谢您的回答,但没有帮助。我已经更新了这个问题。当我将 PreDeploy 标记移出到另一个项目文件并使用通配符进行更改时。但是在使用 TT 文件重新生成 SQL 之后,它仍然添加了我在问题中提到的这个错误的构建标签。
  • 赞成,因为通配符确实对我有用(我对项目中的所有 .sql 文件都使用了变体,&lt;Build Include="**\*.sql" /&gt;),但需要注意的是:1. 它不适用于Folder Include=**\*或任何变体,2. 可以通过 VS 添加 .sql 文件,但不能在没有错误的情况下删除它们,3. 不能从 VS 更改任何“文件属性 > 构建操作”,或者 VS 将在 .sqlproj 中显式写出所有.
  • 我试图引入一个带有&lt;Import&gt;.targets 文件,但是当它显然被导入时(.targets 中的故意错误会导致项目加载错误),&lt;Build Include...&gt; 标签似乎无论路径格式如何,都将被忽略。
猜你喜欢
  • 2011-10-20
  • 1970-01-01
  • 2012-07-20
  • 2021-12-19
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
相关资源
最近更新 更多