【发布时间】:2015-06-21 20:02:24
【问题描述】:
在 Visual Studio 中的 NuGet 包管理器控制台(我使用的是 2010 Ultimate)中,以下代码有效并成功激活了工具箱窗口:
$dte.windows.Item("{B1E99781-AB81-11D0-B683-00AA00A3EE26}").activate()
但相同的代码在独立的 PowerShell 控制台会话中不起作用。这是我正在使用的脚本:
# Note: Start PowerShell console with the -STA switch.
# Get reference to VS2010 automation object (COM).
$DTE = New-Object -ComObject VisualStudio.DTE.10.0
$DTE.Solution.Open("C:\wfa1\wfa1.sln")
$DTE.MainWindow | %{$_.gettype().InvokeMember("Visible","SetProperty",$null,$_,$true)}
$DTE.Windows.Item("{B1E99781-AB81-11D0-B683-00AA00A3EE26}").Activate()
$DTE.Quit()
我得到的错误:
方法调用失败,因为 [System.__ComObject] 不包含 一个名为“项目”的方法。
在 C:\users\ams\Desktop\ATS\AddTypeSample.ps1:114 char:18
+ $DTE.Windows.Item + CategoryInfo : InvalidOperation: (Item:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
我知道 NuGet 准备了它的控制台,例如,$dte 变量可以立即使用,而无需执行任何操作。如何设置我的 PS 脚本,以便命令能够像在 NuGet 控制台中一样无缝运行?
我在 Windows 7 Ultimate 上使用 PowerShell 版本 2。
【问题讨论】:
-
(注:完全不熟悉 NuGet。)在这两种情况下,
$dte.Windows是什么? -
@EtanReisner NuGet 控制台中
$dte.Windows的输出是一系列以AutoHides开头并以OutstandingEventCount结尾的重复属性;在 PowerShell 控制台中,输出为System.__ComObject重复九次。 -
$dte.windows[0].gettype()怎么样? (我假设它是重复的数组。) -
@EtanReisner 在 PowerShell 控制台中:无法索引到 System.__ComObject 类型的对象。在 NuGet 中:无法索引到 Microsoft.VisualStudio.Platform.WindowManagement.DTE.Windows 类型的对象。
-
不完全是我期望找到的类型,但这似乎给了我想要的东西。我不知道如何处理这些信息,但问题似乎是 powershell 没有在 windows 对象上使用/设置正确的类型。您可以尝试手动投射,但我认为这不太可能奏效。熟悉 NuGet 的人可能可以在这里说更多,但我认为我的深度太远了,无法提供更多帮助。
标签: powershell com nuget envdte