我正在使用 VS 2010 (C#) T4 模板来生成代码。
我需要遍历我的项目中的所有类型,将实体 poco 类列入候选名单并生成包装器。问题是,项目名称空间未被识别。
这是解决方案的结构:
namespace MySolution.Entities
{
public class Employee { ... }
public class Department { ... }
}
// Seperate project referenceing MySolution.Entities.
namespace MySolution.Database
{
public partial class Context { ... }
// Should generate Context.cs as a partial class with after iterating Syste.Types available in MySolution.Entities.
Context.tt
}
这是文本模板:
<#@ template language="C#" #>
<#@ Output Extension=".cs" #>
namespace MySolution.Database
{
public partial class Context:
System.Data.Entity.DbContext
{
<#
System.Type [] types = typeof(MySolution.Entities).Assembly.GetTypes();
for (int i=0; i < types.Count; i++)
#>
public <#= types[i].Name; #> <#= types[i].Name; #> { get; set; }
}
}
上面的代码生成错误:找不到类型或命名空间“MySolution”。您是否缺少 using 指令或程序集引用?然后我将以下代码行包含在程序集中:
<#@ Assembly Name="..\MySolution.Entities\bin\x86\Release\MySolution.Entities.dll" #>
现在它给了我一个不同的错误:主机在尝试解析程序集引用“..\..\..TrafficMonitor.Core\bin\x86\Release\TrafficMonitor.Library.dll”时抛出异常。转换将不会运行。引发了以下异常:System.IO.FileLoadException:给定的程序集名称或代码库无效。(来自 HRESULT 的异常:0x80131047)
关于如何克服这个限制的任何想法?