为什么我的T4模板会在文件名后附加一个数字?

时间:2009-12-21 21:50:33

标签: visual-studio t4

为什么我的T4模板有时会在输出文件中附加一个数字,有时不会?例如,在一种情况下,我可能有一个名为Foo.tt的模板文件,我将获得Foo.cs的输出文件。在其他情况下,我将获得Foo1.cs的输出文件。 在每种情况下,没有其他 Foo.cs文件可能会导致它附加一个数字。换句话说,它绝对不是任何结果明显的文件名冲突。

我是一个深度肛门保持开发者,所以我很想知道如何摆脱那个无用的数字后缀。

3 个答案:

答案 0 :(得分:76)

当Visual Studio让自己感到困惑并且由于某种原因(通常是幻觉)而无法使用Foo.cs作为输出时会发生这种情况,因此它将使用Foo1.cs代替然后坚持记住这个设置

修复方法是在文本编辑器中打开.csproj文件并找到Foo.tt条目。这应该有一个名为LastGenOutput的子元素。将其更改回Foo.cs,保存项目文件,然后在VS中重新打开它。

然后 - 叹气 - 等待它再次发生。您可以看到http://social.msdn.microsoft.com/Forums/en/linqtosql/thread/0c0f77a6-d712-43d2-a990-555df7960123了解更多详细信息,但似乎没有人能够解释导致VS进入此状态的原因或如何阻止它这样做...

答案 1 :(得分:39)

@ itowlson的答案真的帮助了我,但我发现了一个稍微简单的解决方法,我认为我会分享。

如果你有:

Filename.tt
└── Filename1.cs

只需将Filename.tt重命名为Filename2.tt

Filename2.tt
└── Filename2.cs

再次回到Filename.tt

Filename.tt
└── Filename.cs

瞧。

答案 2 :(得分:1)

我在 VS2019 中发现了一些可以解释问题的潜在原因的内容。

在 CSPROJ 文件中,VS 希望使用 <Content Include="Generator.tt"> 标签包含一个 TT 文件。当使用 VS 内置界面中的上下文菜单项通过剪切/复制/粘贴将 TT 文件添加到项目时,VS 有时可能会使用错误的 XML 标记,例如 <None Update="Generator.tt">。尽管事实上如果您打开 TT 文件的属性表,它将显示“内容”作为构建操作。

打开 CSPROJ 文件,如果将 <None> 标记更改为 <Content> 并将 Update 属性更改为 Include,然后重新启动 VS,问题似乎消失了离开。