包含XML的T4模板导致解析错误

时间:2012-07-02 12:45:10

标签: .net xml config t4 transformation

我为我的网站和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";
#>

这是screenshot

2 个答案:

答案 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上记录错误,那将会有所帮助。