【问题标题】:T4 Template Save as UnicodeT4 模板另存为 Unicode
【发布时间】:2012-07-29 03:17:04
【问题描述】:

我使用 Oleg Sych 所说的 Template - Generator 架构师通过 T4 生成一些代码,但是使用 Unicode 存在一些问题,在生成所有显示为问号的波斯字符后,我有一些波斯字符。

这是我的文件:模板:

<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#@ import namespace="System.Collections.Generic" #>
<#+
public class DALTable : Template
{

    public override string TransformText()
    {

        //My Template

    }

生成器:

<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
<#@ include file="DALTable.tt" #>
<#+
public class TableDALGenerator : Generator
{
    public DALTable DALTableTemplate = new DALTable();

    protected override void RunCore()
{
        this.DALTableTemplate.Table = table;
        this.DALTableTemplate.RenderToFile("DAL.cs");
    }
 }

还有脚本:

<#@ template language="C#v4" hostspecific="True" debug="True" #>
<#@ assembly name="System.Core" #>
<#@ output extension=".cs" encoding="UTF8" #>
<#@ include file="T4Toolbox.tt" #>
<#@ include file="TableDALGenerator.tt" #>
<#
    TableDALGenerator TableDALGen = new TableDALGenerator();
    //Pass Parameters
    TableORMGen.Run();
#>

正如 Oleg Sych 所说,我在输出中设置了 Unicode,正如您在这一行中看到的那样:&lt;#@ output extension=".cs" encoding="UTF8" #&gt; 我也将这 3 个文件都保存为 Unicode utf8 但问题依然存在,问题出在哪里?还有什么事情是我必须做的?

更新

我发现我新生成的文件(DAL.cs)没有一个没有保存为UTF8,所有这些文件都通过ANSI 编码保存。通过UTF8编码保存我的文件需要做什么?

【问题讨论】:

  • &lt;#@ output extension=".log" encoding="UTF-8" #&gt;UTF8 应该是UTF-8

标签: c# visual-studio-2010 templates unicode t4


【解决方案1】:

&lt;#@output 指令适用于 T4 文件的直接输出。 您需要更改模板,使其输出为 UTF8

public class DALTable : Template 
{ 
    public DALTable()
    {
        Output.Encoding = System.Text.Encoding.UTF8;
    } 

    public override string TransformText() 
    ...

【讨论】:

  • 我在这里问一个相关的问题:stackoverflow.com/questions/13838142/… 请你检查一下
  • 我注意到 System.Text.Encoding.UTF8 默认呈现 Unicode BOM(字节顺序标记),(通常)根本不应该使用它。不幸的是,.NET Framework 中没有公共 UTF8NoBom 单例,但您可以使用 Output.Encoding = new UTF8Encoding( encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true );
【解决方案2】:

根据 MSDN (https://msdn.microsoft.com/en-us/library/gg586943.aspx),要在 output 元素中执行此操作,您需要说 encoding="utf-8",因此使用连字符(字母大小写似乎没有区别)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多