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

dem*_*tos 4 .net xml t4 config transformation

我已经为我的web和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";
#>
Run Code Online (Sandbox Code Playgroud)

这是截图

Rei*_*eek 5

同样的问题在这里 我通过在.tt文件中替换该行来解决它

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<# WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); #>
Run Code Online (Sandbox Code Playgroud)

一旦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";
#>
Run Code Online (Sandbox Code Playgroud)