<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ assembly name="EnvDTE80" #>
<#@ include file="T4Toolbox.tt" #>
<#
IServiceProvider serviceProvider = (IServiceProvider)this.Host;
EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)serviceProvider.GetService(typeof(EnvDTE.DTE));
//add a file to a project and add its dependupon build property.
//I want to refresh teh solution explorer window to show the hierarchy between 2 files
//You will see this kind of relationship between Forms.cs and Form1.Designer.cs files.
EnvDTE.UIHierarchy solExplorer = dte.ToolWindows.SolutionExplorer;
solExplorer.Parent.Activate();
dte.ExecuteCommand("View.Refresh", string.Empty);
我正在尝试刷新解决方案资源管理器的工具窗口,以便可以看到嵌套的新创建文件。我知道 T4 模板在一个应用程序域中执行,并使用远程处理对 Visual Studio Appdomain 进行调用。我收到这个关于序列化的错误。那么有没有一种方法可以通过首先激活它来刷新解决方案资源管理器工具窗口(solExplorer.Parent)(有人告诉我)。
在程序集“Microsoft.VisualStudio.Platform.WindowManagement, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中键入“Microsoft.VisualStudio.Platform.WindowManagement.DTE.WindowBase”未标记为可序列化。
更新:基于 Gereth 的评论。
谢谢,Gereth 我试过了,但它返回 COMException,
我没有关于 Microsoft.VisualStudio.Platform.WindowManagement.DTE.WindowBase 类的序列化的错误,并且激活方法似乎已经成功。 错误现在出现在 dte.ExecuteCommand 方法上。
//object dteObject = GetCOMService(serviceProvider, typeof(EnvDTE80.DTE2));
object dteObject1 = GetCOMService(serviceProvider, typeof(EnvDTE.DTE));
EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)dteObject1;
执行此行时引发 COMException:
dte.ExecuteCommand("View.Refresh", string.Empty);
消息“错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回。”
源“EnvDTE80”
StackTrace“在 EnvDTE80.DTE2.ExecuteCommand(String CommandName, String CommandArgs)
ErrorCode -2147467259
接下来要尝试什么?
谢谢拉德