簡體   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