Visual Studio 2012 T4模板生成XML出错

8

我正在使用Visual Studio 2012从T4模板生成XML。模板的顶部如下所示:

<#@ template language="VBv4" hostspecific="True" debug="True" #>
<#@ output extension="wmef" #>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>

T4模板可以正确生成XML,这没有问题。然而,Visual Studio会混淆它,并且还会尝试将模板本身作为XML来处理,并报告构建错误,说XML格式不正确,当然,这是因为它是用于XML的模板,而不是实际的XML。
当我首次编辑.tt文件时,一切都很好。但是,一旦生成XML文件并在编辑器中加载它以查看它,然后回到.tt文件,突然.tt文件的语法突出显示为XML,然后出现了构建错误。
也许这只是微软的一个bug。对于这里可能发生的情况,有什么想法吗?

1
可能是自动编辑器选择将.TT文件视为XML。尝试使用“打开方式...”并选择源代码编辑器,将其设置为默认值并关闭模板。双击以在源代码编辑器中打开模板。 - Just another metaprogrammer
Visual Studio 2012没有“打开方式”选项。 - bradgonesurfing
即使我将扩展名为“tt”的文件的编辑器设置为在某个时刻使用源编辑器,Visual Studio仍然“猜测”它是一个XML文件并切换到XML编辑器。 - bradgonesurfing
在VS 2012中的解决方案资源管理器中:右键单击TT文件。在“打开”下面有一个“使用以下方式打开...”的选项。 - Just another metaprogrammer
设置默认使用源代码编辑器后,它不再自动切换回 XML 视图,这样我就没有任何问题了。 - Just another metaprogrammer
对我来说,这似乎是与T4模板包含XML导致解析错误相同的问题。 - Reinier Torenbeek
2个回答

9
这是VS中的一个错误。您可以通过在.tt文件中替换该行来解决问题。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>

使用

<# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"); #>

一旦VS混淆了模板文件的XML格式,即使像上面那样编辑并重新启动,它似乎仍然会保持困惑。唯一的解决方法似乎是从项目中删除现有的.tt文件,并从头开始重新创建它。
通过这个更改,.tt文件不再有<?xml?>标签,因此VS不认为它是一个XML文件。它忽略字符串字面量中的所有内容。
这似乎是T4 Template containing XML results in parse errors相同的问题,但是该解决方法从未被OP确认或接受,这就是为什么我在这里重新发布它的原因。

明天我会检查这个。实际上我已经尝试过了,但是失败了,我猜我没有删掉文件并重新引入到项目中去。看起来VS太聪明了,可以根据内容猜测文件类型,而没有手动覆盖的选项。 - bradgonesurfing
好的--对我来说运行良好。如果它不能解决你的问题,请告诉我,这样我们就可以追踪任何差异。 - Reinier Torenbeek

3
作为对Reinier答案的回应...
我发现删除并重新创建文件是可行的,但无需将该文件从项目中排除。
我发现最快/最简单的方法是:
1. 关闭文件。 2. 仅使用Windows资源管理器删除T4文件。这样不会影响.proj文件。 3. 通过从源代码控制获取最新版本将它们重新引入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接