4

是否可以启动 devenv.exe 并从 cmder 打开一个 .sln 文件?从命令行克隆 git repo 后,我想在 Visual Studio 中快速打开解决方案,而无需离开 cmder。

4

2 回答 2

7

Danny 是正确的,您只需键入xxx.sln.

我有点懒,开发了下面的脚本以便能够输入vs,它会找到并打开它在当前目录中找到的第一个 sln 文件。

以下是一些示例命令:

  1. vs- 将打开它找到的第一个 sln 文件,如果找不到它只会打开 Visual Studio 而没有解决方案。我默认使用 Visual Studio 2017 打开。如果您希望默认使用不同的版本,只需更改函数default中的大小写即可。Get-VisualStudioCommand
  2. vs 15- 我的机器上有很多版本的 Visual Studio,所以它的打开方式类似于vs,但会使用 Visual Studio 2015 打开。
  3. vs 13 'helloWorld.sln'- 这将打开一个特定的 sln 文件,即helloWorld.sln. 我最近从事的一个项目在同一个目录中有多个解决方案。
  4. vs -WhatIf -Verbose- 这将向您展示脚本在运行时会做什么,并将打印出 Write-Verbose 消息。方便调试。我在下图中展示了这个例子。

对于此解决方案,我假设您使用的是 PowerShell 控制台。如果是这样,您可以.ps1通过选项定义一个在控制台打开之前运行的文件-File。这就像为每个控制台窗口定义不同的 PowerShell 配置文件(非常强大)。

请参阅下面的图像,其中我显示了设置并修改PowerShell:PowerShell要执行的任务PowerShell -NoExit -NoLogo -File C:\src\ps\Cmder\general_setup.ps1 -new_console:d:"C:\src"

这是图像(请注意,尽管我ls在 PowerShell 中使用别名作为输出,例如 Linuxls命令……这是一个 PowerShell 控制台): 命令设置

如果您将以下脚本添加到C:\src\ps\Cmder\general_setup.ps1文件(或您想要放置的任何位置)...然后您可以输入vs并执行它。请注意,在Get-VisualStudioCommand函数中,我已经放置了所有文件路径......不是最优雅的代码,但如果您的文件路径与devenv.exe我的不同,只需在此处更改它们。

请注意,您也可以花哨并为命令添加一个传递到-ArgumentListor 标志,以便在/SafeMode需要时能够以安全模式打开 Visual Studio,我刚刚将这些创建为一个快速而肮脏的快捷方式。

function Get-VisualStudioCommand
{
    [CmdletBinding()]
    param ( [AllowNull()][String] $vsVersion )
    $vs10 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe"""
    $vs13 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"""
    $vs15 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"""
    $vs17 = """${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe"""

    switch ($vsVersion) 
    { 
        '10' {$vs10}
        '13' {$vs13}
        '15' {$vs15} 
        '17' {$vs17} 
        default {$vs17} 
    }
}

function Get-SolutionName
{
    [CmdletBinding()]
    param ( [AllowNull()][String] $Name )

    if (!$Name)
    {
        $Name = Get-ChildItem -Filter *.sln
    }

    if ($Name)
    {
        $Name = ('"{0}"' -f $Name)
    }

    return $Name
}

function Start-VisualStudioProcess
{
    [CmdletBinding(SupportsShouldProcess=$true)]
    param([String]$Version, [String]$Sln)

    $VsCommand = Get-VisualStudioCommand -vsVersion $Version
    $Sln = Get-SolutionName -Name $Sln

    Write-Verbose -Message ('Starting: command={0} solutionName={1}' -f $VsCommand, $Sln)

    if ($PSCmdlet.ShouldProcess($VsCommand, 'Start-Process'))
    {
        if ($Sln)
        {
            Start-Process -FilePath $vsCommand -ArgumentList $sln
        }
        else
        {
            Start-Process -FilePath $vsCommand 
        }

    }
}
Set-Alias -Name vs -Value Start-VisualStudioProcess

如果您有任何问题,请告诉我。我希望它有所帮助。

于 2017-10-06T04:12:46.513 回答
0

在提示符下运行此命令(cmd、cmder 等)

reg add "HKCU\Software\Microsoft\Command Processor" /v Autorun /d "doskey vs=for /f \"delims=\" %a IN ('dir /b *.sln') do start %a" /f

写“vs”打开解决方案文件夹中的第一个 *.sln 并开心!

于 2019-01-31T13:11:51.647 回答