我将一个基于project.json
/.xproj
格式的项目迁移到了更新的CS2017 .csproj
格式。
该项目包含一个T4 (.tt
)模板文件。
在保存或构建时,它不会重新生成输出。输出的.cs
文件也没有嵌套在.tt
文件下面。
是否有什么需要我做才能让它工作?
我将一个基于project.json
/.xproj
格式的项目迁移到了更新的CS2017 .csproj
格式。
该项目包含一个T4 (.tt
)模板文件。
在保存或构建时,它不会重新生成输出。输出的.cs
文件也没有嵌套在.tt
文件下面。
是否有什么需要我做才能让它工作?
.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>
编辑
如下方评论所述,您可以通过在项目中排除,然后包含模板来快速轻松地完成此操作。
我知道这是2年前的内容,但对于像我这样多年后遇到这个问题的人来说,下面列出的方法适用于我,而无需安装任何东西。我遇到了完全相同的问题,在将项目从Visual Studio 2010升级到Visual Studio 2017后。您的情况可能会有所不同。在开始之前备份您的.csproj文件。
通过编辑.csproj项目文件,可以在构建项目时强制重建所有.tt文件,而无需安装任何内容。编辑.csproj文件似乎有点繁琐,但这是官方认可的方法https://learn.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>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
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
)Microsoft.WebApplication.targets
的内容,您可以从中获得灵感。
TextTemplatingFileGenerator
。自定义工具命名空间应为空白。 - lc.<None Include="Foo.tt">
被写成了<None Update="Foo.tt">
。 - Lennart