首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T4保存模板错误

T4保存模板错误
EN

Stack Overflow用户
提问于 2013-12-05 11:19:05
回答 1查看 804关注 0票数 1

我已经创建了T4模板,当我保存它时,会得到以下错误:问题是什么?

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

代码语言:javascript
复制
<#@ 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

错误的原因我猜是

代码语言:javascript
复制
<#@ assembly name="C:\Net\Excesrise\Final\CodeGenWitht4Templates\bin\Debug\CodeGenWithT4Templates.exe" #>

……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-05 12:57:26

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

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

另外,到本地数据库的连接字符串不是到您的exe,它就像

代码语言:javascript
复制
 conn = new SqlCeConnection("Data Source = MyDatabase.sdf; Password ='<pwd>'");

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

代码语言:javascript
复制
ErrorGeneratingOutput
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20398596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档