我从头开始创建了一个T4模板来生成DTO类。直到昨天,它按预期运行,直到我添加了对DbContext类的调用,如下所示:
using (var context = new TenantDbContext())
{
var entityObjects = ((IObjectContextAdapter) context).ObjectContext.MetadataWorkspace.GetItems<EntityType>(DataSpace.OSpace);
// Processing...
}
现在,当通过保存模板构建或由项目构建触发模板构建时,它会因以下错误而停止:
Running transformation:
System.EntryPointNotFoundException: Entry point was not found. at
System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()
at
Microsoft.VisualStudio.TextTemplating4060E50565D24E6D60BA3E80DDCE2A21E9485A5F4982CD591645549489576DC7687B06DE6C675CAA51175F177B32340E9E07C1C8B0487B2BD65D022D75892D00.GeneratedTextTransformation.TransformText()
奇怪的是,当我调试模板时,它工作正常!我还没有找到原因,并且找不到其他类似问题的人。任何建议将不胜感激。
此文件的导入如下:
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ Assembly Name="System.Data" #>
<#@ assembly name="System.Data.Entity.Design" #>
<#@ assembly name="$(SolutionDir)packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll" #>
<#@ assembly name="$(SolutionDir)packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll" #>
<#@ assembly name="$(SolutionDir)ProjectName.Enties\bin\Debug\ProjectName.Enties.dll" #>
<#@ assembly name="$(SolutionDir)HouseOfSynergy.PowerTools.Library\bin\Debug\HouseOfSynergy.PowerTools.Library.dll" #>
<#@ assembly name="$(SolutionDir)ProjectName\bin\Debug\ProjectName.DataLayer.dll" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Collections.ObjectModel" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #>
<#@ import namespace="System.Data.Entity.Core.Objects" #>
<#@ import namespace="System.Data.Entity.Design.PluralizationServices" #>
<#@ import namespace="System.Data.Entity.Infrastructure" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="ImagineCapture.Enties" #>
<#@ import namespace="ImagineCapture.DataLayer" #>
<#@ import namespace="ImagineCapture.DataLayer.Contexts" #>
<#@ output extension=".cs" #>
我知道所有引用的程序集都存在于其指定的路径上,并且所有程序集都是最新构建的。它在调试时确实有效。
环境:
答案 0 :(得分:0)
T4模板在同一解决方案中引用了一个项目(尽管在构建周期的早期出现了一个项目)。
使用'Debug'解决方法一段时间后,我想到了两个原因:
Debug
中运行模板时,T4主机有足够的时间获取所需的锁,但无法执行以下操作:(1)触发内部垃圾回收以释放引用的程序集,或者:(2)无法作为进程本身终止(虽然我不认为它是任务管理器中的单独进程)。