【问题标题】:Can Visual Studio 2012 be automated using cmdlets?Visual Studio 2012 可以使用 cmdlet 自动化吗?
【发布时间】:2013-07-25 22:48:13
【问题描述】:

我很好奇这是否可以使用 PowerShell 完成。

就我个人而言,我希望实现自动化:将现有的本地 IIS 网站添加到解决方案中

我看到有人尝试使用 COM 来完成此操作,但显然没有任何运气。 Automating Visual Studio 2012 with Powershell, doing it wrong?

【问题讨论】:

  • 当您提到 COM 时,您是指 EnvDTE 吗? ([System.Runtime.InteropServices.Marshal]::GetActiveObject("visualstudio.dte.11.0"))
  • 有人在我的问题中建议StudioShell 项目:stackoverflow.com/questions/16156984/… 我还没有尝试过,但看看它看起来很有希望!
  • Csaba,我不知道 :)

标签: visual-studio powershell visual-studio-2012 cmdlets


【解决方案1】:

您可以使用 PowerShell 自动化 Visual Studio 2012。包管理器控制台实际上是一个 PowerShell 主机。在包管理器控制台中,变量 $dte 是用于自动化大部分 Visual Studio 的 COM 自动化对象。

有关更多详细信息和一些示例,请参阅http://www.wintellect.com/blogs/jrobbins/using-nuget-powershell-to-replace-missing-macros-in-dev-11

【讨论】:

    【解决方案2】:

    我意识到这是一个老问题,但对于那些仍然对此感兴趣的人......

    实际上,编写您自己的 cmdlet 以获取 DTE 对象的 COM 绑定以在 PowerShell 脚本中使用实际上并不需要太多代码。有关有效的Get-DTE ... cmdlet 的源代码,请参阅my answer 的相关问题。一旦你有了 DTE 绑定,它的过程就和你可能在别处看到的所有例子几乎一样。

    示例:

    PS C:\> Import-Module .\GetDTECmdlet.dll;
    PS C:\> $dte = Get-DTE | Select-Object -First 1;
    PS C:\> $dte = Get-DTE -ProcID 8547 | Select-Object -First 1;
    PS C:\> $dte = Get-DTE -FromAncestorProcs | Select-Object -First 1;
    PS C:\> $dte.ExecuteCommand('Help.About');
    PS C:\> [Runtime.InteropServices.Marshal]::ReleaseComObject($dte); | Out-Null;
    


    cmdlet 的源代码可能有点矫枉过正,除非您想像我一样从构建前/构建后的步骤访问 DTE。但是,这应该足以让您入门。

    而且,如果您真的想避免深入构建自己的 cmdlet,您可以在同一个问题上看到 this answer,它基本上将 cmdlet 中的 C# 代码包装在 PowerShell Add-Type -TypeDefinition @"..."@ 命令中,这样您就不会完全需要GetDTECmdlet.dll

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 2012-11-05
      • 1970-01-01
      相关资源
      最近更新 更多