我将project.json
/ .xproj
项目迁移到较新的CS2017 .csproj
格式。
该项目包含一个T4(.tt
)模板文件。
它不会在保存或构建时重新生成其输出。输出.cs
文件也没有嵌套在.tt
文件下面。
我有什么需要做的才能让它发挥作用吗?
答案 0 :(得分:15)
.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>
修改强>
如下面的评论中所述,您可以快速完成此操作。通过排除,然后在项目中包含模板轻松实现。
答案 1 :(得分:1)
我意识到这已经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。如果您的项目是一个网络项目,则附近可能有一条与Microsoft.WebApplication.targets
类似的线,您可以从中汲取灵感。
应该重新启动Visual Studio。如果删除了.tt文件发出的转换文件,然后重建了项目,则应该看到发出的文件重新出现。