【发布时间】:2017-03-22 22:02:46
【问题描述】:
我将project.json/.xproj 项目迁移到更新的 CS2017 .csproj 格式。
该项目包含一个 T4 (.tt) 模板文件。
它不会在保存或构建时重新生成其输出。输出 .cs 文件也不嵌套在 .tt 文件下方。
我必须做些什么才能让它工作吗?
【问题讨论】:
标签: t4 visual-studio-2017 csproj
我将project.json/.xproj 项目迁移到更新的 CS2017 .csproj 格式。
该项目包含一个 T4 (.tt) 模板文件。
它不会在保存或构建时重新生成其输出。输出 .cs 文件也不嵌套在 .tt 文件下方。
我必须做些什么才能让它工作吗?
【问题讨论】:
标签: t4 visual-studio-2017 csproj
.tt 文件仅由 VS 在保存时自动运行。您可以安装AutoT4 让它们在构建之前/之后运行。 (请注意,目前新的 .csproj 文件存在限制 - 选项不会显示在属性窗口中。)
如果您已从旧的project.json/.xproj 格式转换,您可能需要明确地将模板添加到项目中:
<ItemGroup>
<None Update="Foo.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Foo.cs</LastGenOutput>
</None>
<Compile Update="Foo.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Foo.tt</DependentUpon>
</Compile>
</ItemGroup>
编辑
正如下面的 cmets 所述,您可以通过在项目中排除然后包含模板来快速轻松地完成此操作。
【讨论】:
TextTemplatingFileGenerator 正是我想要的。 VS2017 的转换错过了在 TT 文件上设置“自定义工具”属性。我知道它需要设置为something,但不知道what。对于未来的访问者,如果您单击 TT 文件,请检查属性窗口并确保“自定义工具”设置为 TextTemplatingFileGenerator。自定义工具命名空间应为空。
我意识到这是 2 岁以上的问题,但对于像我这样多年来遇到这个问题的人来说,下面列出的方法对我有用,无需安装任何东西。在将项目从 Visual Studio 2010 升级到 Visual Studio 2017 后,我遇到了完全相同的问题。YMMV。在开始之前制作 .csproj 文件的备份副本。
通过编辑 .csproj 项目文件,无需安装任何东西即可在构建项目时强制重建所有 .tt 文件。编辑 .csproj 文件似乎很笨拙,但这是经过批准的方式https://docs.microsoft.com/en-gb/visualstudio/modeling/code-generation-in-a-build-process?view=vs-2015
在您的 .csproj 文件中,您会发现很多 PropertyGroup 节点。在 PropertyGroup 节点列表的末尾(位置不重要),添加另一个具有此内容的 PropertyGroup 节点:
<PropertyGroup>
<TransformOnBuild>true</TransformOnBuild>
<TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup>
现在查看 .proj 文件的末尾附近,您会看到如下一行:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
(出于兴趣,在我的装有 VS2017 的计算机上解析为 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.CSharp.targets)
在该行下方,添加如下一行:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targets" />
(出于兴趣,在我的计算机上解析为C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\VisualStudio\v15.0\TextTemplating\Microsoft.TextTemplating.targets)
YMMV。如果你的项目是 web 项目,那么附近可能有一条类似但与 Microsoft.WebApplication.targets 相关的线路,你可以从中汲取灵感。
这应该可以通过重新启动 Visual Studio 来完成。如果您删除 .tt 文件发出的转换文件,然后重新构建项目,您应该会看到发出的文件重新出现。
【讨论】: