相关疑难解决方法(0)

.Net 6.0项目中的VS2022 T4 EF6模板突然抛出序列化异常

我有一个 .Net 6.0 应用程序(在 VS2019 中以 .Net 5.0 开始)。我使用 EF Core 进行数据访问。我们较旧的应用程序是.Net 4.8,我们有很多 T4 模板,用于生成基于 EDMX (EF6) 的服务类和模型类。在 .Net 6.0 应用程序中,我决定继续使用这些模板(稍作修改),因此我在解决方案中创建了一个 .Net Framework 项目,并添加了一个保存数据库信息的 EDMX。然后在不同的项目(服务项目或模型项目)中,我有 t4 模板来读取 EDMX 并根据数据库生成代码文件。

这些 T4 模板在 VS2019 中完美运行,我相信在 VS2022 中曾经可以运行(不能 100% 确定这一点),但是在最近更改数据库后,我尝试运行这些模板,但每次都开始看到此错误:

运行转换:System.Runtime.Serialization.SerializationException:在程序集“Microsoft.VisualStudio.ProjectSystem.VS.Implementation”中键入“Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProjectItem”,版本= 17.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 未标记为可序列化。

错误指向 EF6.Utility.CS.ttinclude 文件中的这一行:

templateProjectItem = dte.Solution.FindProjectItem(_textTransformation.Host.TemplateFile);
Run Code Online (Sandbox Code Playgroud)

如果我的 T4 模板位于 .Net Framework 项目中,它们可以正常工作,但 .Net 6.0 项目中的任何 T4 模板都会发生此错误。

有几件事:如果我调试 T4 模板而不是运行自定义工具,我就可以运行它们。另外,由于引发错误的代码位于每次 VS 更新时随实体框架工具安装的 EF6.Utility.CS.ttinclude 中,因此我无法对该文件进行任何更改。

c# t4 entity-framework-6

5
推荐指数
1
解决办法
2097
查看次数

T4使用DTE打开生成的文件时,Visual Studio序列化错误

我们有一个名为GenerateProxies.tt的C#T4文件,该文件调用了几个命令行代码生成实用程序。使用System.Diagnostics Process类,我们将标准输出重定向到T4输出文本文件(GenerateProxies.txt),以便我们可以查看命令行输出中的错误。

我在T4的末尾添加了以下简单代码,以便Visual Studio将打开生成的文本文件作为该过程的最后一步(该workingDirectory变量在模板的前面进行了声明和填充)。确实可以,但是会引发序列化错误。可以避免此错误吗?

<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#
    IServiceProvider vssp = (IServiceProvider)this.Host;
    DTE dte = vssp.GetService(typeof(DTE)) as DTE;
    dte.ItemOperations.OpenFile(
        string.Format(@"{0}\GenerateProxies.txt", workingDirectory),
        Constants.vsViewKindTextView
    );
#>
Run Code Online (Sandbox Code Playgroud)

再次,这确实起作用,它打开了文本文件,但是会产生此错误:

Running transformation: System.Runtime.Serialization.SerializationException:
Type 'Microsoft.VisualStudio.Platform.WindowManagement.DTE.WindowBase' in
Assembly 'Microsoft.VisualStudio.Platform.WindowManagement'
is not marked as serializable.
Run Code Online (Sandbox Code Playgroud)

c# t4 envdte visual-studio-2015

4
推荐指数
1
解决办法
1294
查看次数

标签 统计

c# ×2

t4 ×2

entity-framework-6 ×1

envdte ×1

visual-studio-2015 ×1