【发布时间】: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- 代码已添加,我猜问题出在程序集上
-
不应该这样:
<#@ assembly name="C:\Net\Excesrise\Final\...用@转义吗?另外:生成的cs文件是否包含任何内容? -
@ErnodeWeerd- 我已经尝试这样做了: 但是我收到错误:以错误的格式指定了指令。转换将不会运行。请以 格式指定指令
-
正确,我混淆了 T4 和 C# 语法。生成的 C# 文件中是否有任何内容?