在 vs2017 中运行自定义工具时出现 T4 错误

Posted

技术标签:

【中文标题】在 vs2017 中运行自定义工具时出现 T4 错误【英文标题】:T4 error when running Custom Tool in vs2017 【发布时间】:2020-02-23 13:51:20 【问题描述】:

当我想从 vs2017 运行以下命令“Run Cosutom Tool”时,我确实遇到了问题。

VS 更新后停止工作。

而不是运行 T4 并生成与此文件相关的所有代码。 输出文件将包含以下错误消息:

键入“Microsoft.VisualStudio.Data.Tools.Package.Internal.OAFileItem” 在程序集'Microsoft.VisualStudio.Data.Tools.Package, 版本=15.1.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 是 未标记为可序列化。

完整的错误信息:

严重性代码描述项目文件行抑制状态 错误运行转换: System.Runtime.Serialization.SerializationException:类型 'Microsoft.VisualStudio.Data.Tools.Package.Internal.OAFileItem' 在 程序集'Microsoft.VisualStudio.Data.Tools.Package,版本=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 未标记为 可序列化。

服务器堆栈跟踪:在 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型)在 System.Runtime.Serialization.FormatterServices.c__DisplayClass9_0.b__0(MemberHolder _) 在 System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) 在 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型 类型,StreamingContext 上下文)在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文, SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器, ObjectWriter objectWriter, SerializationBinder binder) 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文, SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器, ObjectWriter objectWriter, SerializationBinder binder) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(对象 图,Header[] inHeaders,__BinaryWriter serWriter,布尔 fCheck) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(流 序列化流、对象图、Header[] 标头、布尔 fCheck) 在 System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeMessageParts(ArrayList argsToSerialize) 在 System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage..ctor(IMethodReturnMessage 先生)在 System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage.SmuggleIfPossible(IMessage 味精)在 System.Runtime.Remoting.Channels.CrossAppDomainSink.DoDispatch(字节 [] reqStmBuff, SmuggledMethodCallMessage smuggledMcm, SmuggledMethodReturnMessage& smuggledMrm) 在 System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatchCallback(Object[] 参数)

在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(消息数据& msgData,Int32 类型)在 EnvDTE._Solution.FindProjectItem(字符串 文件名)在 Microsoft.VisualStudio.TextTemplating6FCAD03755FEA2CF76F69000C72CACC8E11DA21396664770DDB2AE835D7A8E82309989CCBC13688F6AC52D362D892E524A6D1554F901D313ED8AA1C0920ED56C.ctorITextTransformationManagerHost. 主机,StringBuilder 模板)在 Microsoft.VisualStudio.TextTemplating6FCAD03755FEA2CF76F69000C72CACC8E11DA21396664770DDB2AE835D7A8E82309989CCBC13688F6AC52D362D892E524A6D1554F901D313ED8AA1C0920ED56C.TemplatingEngine.ManagerCreate( 主机,StringBuilder 模板)在 Microsoft.VisualStudio.TextTemplating6FCAD03755FEA2CF76F69000C72CACC8E11DA21396664770DDB2AE835D7A8E82309989CCBC13688F6AC52D362D892E524A6D1554F901D313ED8AA1C0920ED56C.GeneratedTextTransformation.TransformText()分段d:\ XXXXXXX \ MedatadataGeneratedObjects.tt 1 P>

【问题讨论】:

【参考方案1】:

在我的 T4 中,我使用的是 var dte = (DTE) hostServiceProvider.GetService(typeof(DTE));,我切换到使用 var dte = (DTE) hostServiceProvider.GetCOMService(typeof(DTE));

【讨论】:

以上是关于在 vs2017 中运行自定义工具时出现 T4 错误的主要内容,如果未能解决你的问题,请参考以下文章

分配自定义字体时出现异常

在 HIVE 中运行 UDF 以进行自定义反序列化时出现 OWN_TASK_FAILURE。

仅在VS2017发布时出现角度误差

在 VS2015 中访问类成员时出现运行时错误,但在 Linux 上没有

vs2005使用自定义服务器时出现当前不会命中断点

问题记录:VS链接时出现运行库的版本不匹配问题