繁体   English   中英

NuGet软件包管理器控制台与普通PowerShell控制台之间观察到的差异

[英]Difference observed b/w NuGet Package Manager Console and plain PowerShell console

在Visual Studio(我使用的是2010 Ultimate)的NuGet的Package Manager控制台中,以下代码可以正常工作并成功激活“工具箱”窗口:

$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]不包含名为“ Item”的方法。
在C:\\ users \\ ams \\ Desktop \\ ATS \\ AddTypeSample.ps1:114 char:18
+ $ DTE.Windows.Item <<<<(“ {B1E99781-AB81-11D0-B683-00AA00A3EE26}”)。Activate()
+ CategoryInfo:InvalidOperation:(Item:String)[],RuntimeException
+ FullyQualifiedErrorId:MethodNotFound

我知道NuGet会准备好其控制台,例如, $dte变量可立即使用,而无需执行任何操作。 如何设置我的PS脚本,以便这些命令可以像在NuGet控制台中一样无缝地工作?

我在Windows 7 Ultimate上使用PowerShell版本2。

我认为您尝试做的事是不可能的。 在Visual Studio的Package Manager控制台中时,您的PowerShell脚本在完全不同的主机中运行,该主机提供对Visual Studio环境的访问。 这就是$ dte变量的来源。 在普通的PowerShell控制台窗口中运行脚本时,将使用不了解Visual Studio的默认PowerShell主机。

请参阅在MSDN上编写Windows PowerShell主机应用程序 ,以获取有关Windows PowerShell主机的更多详细信息。 您可以使用Get-Host cmdlet检查脚本在哪个主机中运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM