c# - 在 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.ConcurrentDictionary
2.GetOrAdd(TKey key, Func
2 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
解决方案
在我的 T4 中,我使用的是var dte = (DTE) hostServiceProvider.GetService(typeof(DTE));
我切换到使用var dte = (DTE) hostServiceProvider.GetCOMService(typeof(DTE));
推荐阅读
- mysql - 当在 97.4% 的情况下会导致 1:1 关系时,我是否应该规范化数据库表?
- ios - Swift DropDown 使用 Cocoapods 错误,不起作用
- javascript - 将 Blob 对象转换为文件,用于 Ms Edge
- azure - 用于登录的 Azure AD B2C 自定义策略 - 获取密码错误消息
- git - 尽管存在特定文件夹,但无法将其视为未暂存
- java - 检查设备是否正在发送 HDMI 信号
- office365 - 节点模块“imap”在执行任何操作时返回 401
- c++ - 使用 Raspberry Pi 转换 mp4 文件并将它们流式传输到查看器
- google-apps-script - 从 Google Script Blank 获取会话
- sql-server - 使用 Python 连接到 SQL Server 时出现“TDS 流中的协议错误”和“由于预登录失败,客户端无法建立连接”