【问题标题】:T4 save template errorT4 保存模板错误
【发布时间】:2013-12-05 11:19:05
【问题描述】:

我创建了 T4 模板,当我保存它时出现以下错误: 可能是什么问题

代码是 错误是因为程序集 c:\net\ex....

<#@ template language="C#" debug="True" hostspecific="True" #>
<#@ output extension="generated.cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Data.SqlServerCe" #>
<#@ assembly name="System.Data.Entity" #>

<#@ assembly name="C:\Net\Excesrise\Final\CodeGenWitht4Templates\bin\Debug\CodeGenWithT4Templates.exe" #>

<#@ assembly name="System.xml" #>

<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlServerCe" #>
<#@ import namespace="System.Data.Entity" #>
using System;

namespace Demo.Entities 
{    
  <#


                    var connectionString=@"data source=C:\Net\Excesrise\Final\CodeGenWitht4Templates\bin\Debug\CodeGenWithT4Templates.exe";

                        SqlCeConnection conn = new SqlCeConnection(connectionString);
            conn.Open(); 
            System.Data.DataTable schema = conn.GetSchema("TABLES"); 
            string selectQuery = "select * from @tableName"; 
            var command = new SqlCeCommand(selectQuery,conn); 
            var ad = new SqlCeDataAdapter(command); 
            System.Data.DataSet ds = new DataSet(); 
            string currentTableName = String.Empty;

                        //PushIndent("          ");
            foreach(System.Data.DataRow row in schema.Rows) 
            { 
                currentTableName = row["TABLE_NAME"].ToString();
                                currentTableName = currentTableName = currentTableName.Replace(" ", "");
                                currentTableName = currentTableName.Replace("[", "");
                                currentTableName = currentTableName.Replace("]", "");
            #> 
public class <#= currentTableName #>   {
<#                 
    command.CommandText = selectQuery.Replace("@tableName",row["TABLE_NAME"].ToString()); 
    ad.FillSchema(ds, SchemaType.Mapped, row["TABLE_NAME"].ToString());

    foreach (DataColumn dc in ds.Tables[0].Columns)
    {
        var typeName = dc.DataType.Name;
        var propName = dc.ColumnName.Replace(dc.ColumnName[0].ToString(), dc.ColumnName[0].ToString().ToLower());
      propName = propName.Replace(" ", "");

        WriteLine ( "  public " + typeName + " " + propName + " {get;set;}" );                 
    }                 #>
 }                

      <#    
      }  #>  
}

错误 1:

命名空间不能直接包含成员,例如字段或 方法 C:\Net\Excesrise\Final\CodeGenWitht4Templates\ClassesFromDB.generated.cs

错误 2

编译转换:元数据文件 'C:\Net\Excesrise\Final\CodeGenWitht4Templates\bin\Debug\CodeGenWithT4Templates.exe' 不可能 找到 C:\Net\Excesrise\Final\CodeGenWitht4Templates\ClassesFromDB.tt 1 1 CodeGenWithT4Templates

我猜的错误原因

<#@ assembly name="C:\Net\Excesrise\Final\CodeGenWitht4Templates\bin\Debug\CodeGenWithT4Templates.exe" #>

....

【问题讨论】:

  • 请向我们展示 T4 模板。它可能在类之外创建了一个字段或方法。
  • @ErnodeWeerd- 代码已添加,我猜问题出在程序集上
  • 不应该这样:&lt;#@ assembly name="C:\Net\Excesrise\Final\...@ 转义吗?另外:生成的cs文件是否包含任何内容?
  • @ErnodeWeerd- 我已经尝试这样做了: 但是我收到错误:以错误的格式指定了指令。转换将不会运行。请以 格式指定指令
  • 正确,我混淆了 T4 和 C# 语法。生成的 C# 文件中是否有任何内容?

标签: c# .net t4


【解决方案1】:

第二个错误:你不需要引用自己的exe。因为

  1. Assembly 指令用于程序集,而不是可执行文件
  2. 您只使用标准类
  3. 此 exe 是使用 T4 的输出构建的,递归?)

还有 到本地数据库的连接字符串不是你的 exe,就像

 conn = new SqlCeConnection("Data Source = MyDatabase.sdf; Password ='<pwd>'");

您的其余代码看起来不错。 而你的第一个错误来自一个错误的生成文件,因为它是这样的

ErrorGeneratingOutput

【讨论】:

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