将ef.utility.cs.ttinclude转换为类

时间:2012-11-21 21:45:51

标签: c# entity-framework-5

我已将Visual Studio Entity Framework 5.0包含文件(EF.Utility.CS.ttinclude)中找到的类转换为一组标准C#类。为什么我这样做是不重要的,只要说我有充分的理由这样做,而且没有其他方法可以实现我想要完成的任务。当尝试通过提供的t4模板(为EF生成标准DbContext的模板)测试类时,我收到以下错误:


Error   1   Running transformation: System.IO.FileNotFoundException: Could not load file or assembly 'EFUtilities_5_0_DeConstruct, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'EFUtilities_5_0_DeConstruct, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)
   at System.UnitySerializationHolder.GetRealObject(StreamingContext context)
   at System.IServiceProvider.GetService(Type serviceType)
   at EFUtilities_5_0_DeConstruct.EntityFrameworkTemplateFileManager.Create(Object textTransformation) in c:\Users\Sam\Documents\Visual Studio 2012\Projects\EFExplorer_5\EFUtilities_5_0_DeConstruct\EntityFrameworkTemplateFileManager.cs:line 29
   at Microsoft.VisualStudio.TextTemplating6F3E7F749A9B7F1589040546E2B00865752CC91ED5490722E3718CB7A5DDD503FF97964710FBB3EBF135630FF50F8F2A8EA8FA5AA531EC2449158E3D60FD019D.GeneratedTextTransformation.TransformText()

在创建项目时添加了标准的Entity Framework数据项目并且已经生成了从数据库构建的模型(数据库有一个没有任何特殊之处的表 - 主键)后,Visual Studio 2012 Premium中会出现此错误,几个测试列)选择Build | Transform all T4菜单选项(仅在选择Model1.tt文件并选择"运行自定义工具"时也会发生)。 Model1.tt(名称是默认分配的)文件是失败的文件,Model1.Context.tt文件执行得很好。两个模板都已经过修改,因此它们包含与EF.Utility.CS.ttinclude文件相同的程序集和导入子句(实际上是剪切和粘贴)以及存储结果类的DeConstruct程序集的附加引用。该解决方案将" Debug"中的标准调试位置编译到" Release"的生产目录(C:\ T4 \ EF_5_0 \ Assembiles)。我已经尝试将Model1.tt文件设置为指向两个位置,并且我得到相同的错误。

违规行如错误所示:     DTE dte =(DTE)hostServiceProvider.GetService(typeof(DTE));

envDTE将程序集添加到类的引用和using子句中。

所有这些的关键是我已经使用EF 4.3.1 EF.Utility.CS.ttinclude文件和Visual Studio 2010中相应的4.3 DbContext生成器文件成功完成了这项工作。工作正常,有一个爆炸增强了基本类等等......那么为什么我会在VS2012和EF 5.0中看到这个错误的任何线索呢?我没想过的一件事就是将EF 5.0带入VS2010环境。有点不想污染工作环境。

1 个答案:

答案 0 :(得分:1)

找到答案:

选择哪个版本的EnvDTE无关紧要(GAC中的那个版本,显示为“envdte”或VS2012的本地版本,显示为“EnvDTE”。将任一个添加到项目中,然后,一次添加,右键(关闭)单击引用列表中的程序集名称(“EnvDTE”或“envdte”),选择“属性”并将属性“嵌入互操作类型”设置为false并重建。这对我来说很有用。 / p>