我有一个 .Net 6.0 应用程序(最初在 VS2019 中开始为 .Net 5.0)。我使用 EF Core 进行数据访问。我们较旧的应用程序是 .Net 4.8,我们有很多 T4 模板,我们用它们基于 EDMX(EF6)生成服务类和模型类。在 .Net 6.0 应用程序中,我决定继续使用这些模板(稍作修改),因此我在解决方案中创建了一个 .Net Framework 项目,并添加了一个保存数据库信息的 EDMX。然后,在不同的项目中(服务项目或模型项目),我有读取 EDMX 并基于数据库生成代码文件的 t4 模板。
这些 T4 模板在 VS2019 中运行得非常流畅,并且我相信它们曾经在 VS2022 中运行过(不确定),但在最近进行数据库更改后,我尝试运行模板,每次都会看到以下错误:
运行转换:System.Runtime.Serialization.SerializationException: 在程序集 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 中,在 Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProjectItem 中找不到标记为可序列化的类型。
该错误指向 EF6.Utility.CS.ttinclude 文件中的这一行:
我的T4模板在.NET Framework项目中运行良好,但是任何.NET 6.0项目中的T4模板都会出现此错误。
有几件事情需要注意:如果我调试而不是运行自定义工具,则可以运行T4模板。另外,由于引发错误的代码在EF6.Utility.CS.ttinclude中,该文件每次VS更新时都会安装Entity Framework Tools,因此我无法对该文件进行任何更改。
这些 T4 模板在 VS2019 中运行得非常流畅,并且我相信它们曾经在 VS2022 中运行过(不确定),但在最近进行数据库更改后,我尝试运行模板,每次都会看到以下错误:
运行转换:System.Runtime.Serialization.SerializationException: 在程序集 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 中,在 Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProjectItem 中找不到标记为可序列化的类型。
该错误指向 EF6.Utility.CS.ttinclude 文件中的这一行:
templateProjectItem = dte.Solution.FindProjectItem(_textTransformation.Host.TemplateFile);
我的T4模板在.NET Framework项目中运行良好,但是任何.NET 6.0项目中的T4模板都会出现此错误。
有几件事情需要注意:如果我调试而不是运行自定义工具,则可以运行T4模板。另外,由于引发错误的代码在EF6.Utility.CS.ttinclude中,该文件每次VS更新时都会安装Entity Framework Tools,因此我无法对该文件进行任何更改。