首页 > 解决方案 > 在 vs2017 中运行自定义工具时出现 T4 错误

问题描述

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

它在 VS 更新后停止工作。

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

在程序集“Microsoft.VisualStudio.Data.Tools.Package, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中键入“Microsoft.VisualStudio.Data.Tools.Package.Internal.OAFileItem”未标记为可序列化。

完整的错误信息:

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

服务器堆栈跟踪:在 System.Runtime.Serialization.FormatterServices 的 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)。<>c__DisplayClass9_0.b__0(MemberHolder _) 在 System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) 在 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize 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(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
在 System.Runtime.Remoting.Channels.CrossAppDomainSerializer.SerializeMessageParts(ArrayList argsToSerialize) 在 System.Runtime。 Remoting.Messaging.SmuggledMethodReturnMessage..ctor(IMethodReturnMessage mrm) 在 System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage.SmuggleIfPossible(IMessage msg) 在 System.Runtime.Remoting.Channels.CrossAppDomainSink.DoDispatch(Byte[] reqStmBuff, SmuggledMethodCallMessage smuggledMcm, SmuggledMethodReturnMessage smuggledMrm) 在 System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatchCallback(Object[] args)

在 [0] 处重新抛出异常:在 EnvDTE._Solution 的 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) 处的 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)。 FindProjectItem(String FileName) at Microsoft.VisualStudio.TextTemplating6FCAD03755FEA2CF76F69000C72CACC8E11DA21396664770DDB2AE835D7A8E82309989CCBC13688F6AC52D362D892E524A6D1554F901D313ED8AA1C0920ED56C.GeneratedTextTransformation.Manager.VSManager..ctor(ITextTemplatingEngineHost host, StringBuilder template) at Microsoft.VisualStudio.TextTemplating6FCAD03755FEA2CF76F69000C72CACC8E11DA21396664770DDB2AE835D7A8E82309989CCBC13688F6AC52D362D892E524A6D1554F901D313ED8AA1C0920ED56C.GeneratedTextTransformation.Manager.Create(ITextTemplatingEngineHost host,StringBuilder template) at Microsoft.VisualStudio.TextTemplating6FCAD03755FEA2CF76F69000C72CACC8E11DA21396664770DDB2AE835D7A8E82309989CCBC13688F6AC52D362D892E524A6D1554F901D313ED8AA1C0920ED56C.GeneratedTextTransformation.TransformText() Staging D:\XXXXXXX\MedatadataGeneratedObjects.tt 1

标签: c#.netvisual-studiovisual-studio-2017t4

解决方案


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


推荐阅读