我为我的网站和Windows项目的配置文件创建了T4模板。我可以成功生成主web.config,以及其他环境的所有配置,即web.ci.config等。但是,我无法摆脱我的主tt文件上的错误,例如:
- 字符'#',十六进制值0x23在XML名称中是非法的。
- 字符'<',十六进制值0x3c在XML属性值中是非法的。
- 意外的XML声明。 XML声明必须是文档中的第一个节点,并且不允许在其前面显示空白字符。
我应该缺少xml架构或引用,但是什么?
我的文件如下:
<#@ template debug="true" hostSpecific="true" #>
<#@ output extension= ".config" #>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<add key="FileUploadFolder" value="<#= this.FileUpload #>" />
...
</configuration>
<#+
string FileUpload="\\\\server\\folder";
#>
答案 0 :(得分:5)
这里的问题相同。我通过在.tt
文件中替换行
<?xml version="1.0" encoding="utf-8"?>
与
<# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); #>
一旦VS对模板文件的XML格式感到困惑,它似乎就会持续存在这种混乱 - 即使在完成上述编辑和重新启动之后也是如此。唯一的解决方法似乎是从项目中删除现有的.tt
文件并从头开始重新创建。
通过此更改,.tt
文件不再具有<?xml?>
标记,因此VS不会将其视为XML文件。它会忽略文字字符串中的所有内容。您的整个模板现在看起来像这样:
<#@ template debug="true" hostSpecific="true" #>
<#@ output extension= ".config" #>
<# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); #>
<configuration>
...
<add key="FileUploadFolder" value="<#= this.FileUpload #>" />
...
</configuration>
<#+
string FileUpload="\\\\server\\folder";
#>
答案 1 :(得分:0)
这里发生的事情是VS中的Xml语言服务错误地将您的T4文件识别为Xml文件,因此会发出大量误报错误消息。
我正在研究是否有一种解决方法来强制它忽略T4文件。 如果您可以在Microsoft Connect上记录错误,那将会有所帮助。