在 .NET Core 项目中使用 T4 模板时遇到问题

Trouble using a T4 Template in a .NET Core project

我正在尝试使用 described here 方法来使用 T4 模板自动增加 .NET Core 3.1 项目中的内部版本号。不幸的是它不起作用。我生成的程序集只有 1.0.0 作为版本。我想知道是否有人可以告诉我我做错了什么:

首先,我创建了 "Version.tt" 文件并按照描述编写(复制)了 T4 模板。

<#@ template language="C#" #>
// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//

using System.Reflection;

[assembly: AssemblyVersion("2.0.0")]
[assembly: AssemblyFileVersion("2.0.0.<#= this.BuildNumber #>")]
[assembly: AssemblyInformationalVersion("2.0.0.<#= this.BuildNumber #>")]
<#+
    int BuildNumber    = (int)(DateTime.Now - new DateTime(2020,1,1)).TotalDays;
#>

然后我将这个文件放在根文件夹中并将其作为 link

添加到我的项目中

但是当我从 Windows Explorer 构建并查看程序集属性时,它只是说它是“1.0.0”。在 VS 项目中,我查看了 TT 文件的属性,我看到了这个:

我尝试搜索目录,但没有看到任何类型的输出文件。我缺少一些步骤吗?我需要更改其中一个属性吗?我在 "Build Action" 中没有看到任何似乎适用的内容。

我运行通过你的例子。抱歉——在您的情况下,您希望构建操作为 None。

对我有用的是这个模板(显示一些示例导入语句,如果您的模板需要变得更健壮...):

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Text.RegularExpressions" #>
// Generated by a T4 template!
using System.Reflection;

[assembly: AssemblyVersion("2.0.0")]
[assembly: AssemblyFileVersion("2.0.0.<#= this.BuildNumber #>")]
[assembly: AssemblyInformationalVersion("2.0.0.<#= this.BuildNumber #>")]
<#+
    int BuildNumber    = (int)(DateTime.Now - new DateTime(2020,1,1)).TotalDays;
#>

因为您正在尝试生成自己的 AssemblyInfo.cs 文件,所以我建议将此 T4 模板放在项目的 Properties 文件夹中并删除现有的 AssemblyInfo.cs 文件。保存 T4 模板后,它将立即构建并生成 AssemblyInfo.cs(如果没有发生错误)。我测试了上面的内容并且它有效。